2017-03-01 12 views
0

2つのJSONオブジェクトがあります.1つは文字列の配列で、もう1つはオブジェクトの配列です。文字列配列の値がオブジェクト配列内に存在するかどうかを確認したい場合は、オブジェクト配列内の特定の値を設定します。類似した値のJSON配列をtypescriptで比較する

すなわち:

[ 'fghij', 'klmno' ] 

結果は以下のようになります:

### Object Array after 
[{ 
    name: 'ABCDE', 
    value: 'abcde', 
    checked: false 
}, 
{ 
    name: 'FGHIJ', 
    value: 'fghij', 
    checked: true 
}, 
{ 
    name: 'KLMNO' 
    value: 'klmno' 
    checked: true 
}] 
+0

文字列配列は、一つではありません。これはオブジェクト配列です。それは '[' fghij '、' klmno '] 'であるべきですか? –

+0

申し訳ありません、私の部分にはじまります –

答えて

2

ような何か、次のオブジェクト配列

### Object Array before 
[{ 
    name: 'ABCDE', 
    value: 'abcde', 
    checked: false 
}, 
{ 
    name: 'FGHIJ', 
    value: 'fghij', 
    checked: false 
}, 
{ 
    name: 'KLMNO' 
    value: 'klmno' 
    checked: false 
}] 

と、次の文字列配列を与え考えます

arr.map(v => Object.assign(v, {checked: stringArray.indexOf(v.value) !== -1 })) 

arrは元の配列、stringArray['fghij','klmno']

編集含まれている:あなたは元の配列を変更したくない場合はTypescript Playground

それを実証しObject.assign({}, v, {checked: stringArray.indexOf(v.value) !== -1 })

+0

これは部分的に機能し、以下を返します: '[{" checked ":false}、{" checked ":true}、{" checked ":true}]'マップされます。 –

+0

ES6をターゲットに設定していますか? 'Object.assign'は基本的に2つのオブジェクトの浅い「マージ」を行いますが、ES6でのみ使用できます。そうでない場合は、ポリフィルを取得する必要があります –

+0

polyfillはそこにあります:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign –

0

assignコールを変更するIコードの明快さとパフォーマンス上の理由からES6 Setオブジェクトの値を収集することを提案します。

基本的には、ここでは2つのオプションがあります。アレイを所定の場所に変更するか、コピーします。両方の例は:

const data = [{ 
 
    name: 'ABCDE', 
 
    value: 'abcde', 
 
    checked: false 
 
}, { 
 
    name: 'FGHIJ', 
 
    value: 'fghij', 
 
    checked: false 
 
}, { 
 
    name: 'KLMNO', 
 
    value: 'klmno', 
 
    checked: false 
 
}]; 
 

 
const toCheck = [ 'fghij', 'klmno' ]; 
 

 

 
const toCheckSet = new Set(toCheck); 
 

 
// copying the data 
 
const newData = data.map(obj => ({ 
 
    name: obj.name, 
 
    value: obj.value, 
 
    checked: toCheckSet.has(obj.value) 
 
})); 
 
console.log(newData); 
 

 
// altering in place: 
 
data.forEach(obj => { obj.checked = toCheckSet.has(obj.value); }) 
 
console.log(data);

関連する問題