2017-03-01 37 views
0

我有2個JSON對象,一個是字符串數組,另一個是對象數組。我想檢查對象數組中是否存在字符串數組中的值,如果存在,請在對象數組中設置特定值。在打字稿中比較類似值的JSON數組

即:考慮下列對象陣列

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

並給予下述的字符串數組:

[ '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

喜歡的東西

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

arr是原來的數組,stringArray包含['fghij','klmno']

編輯Typescript Playground證明它

如果你不想原數組修改變化assign調用Object.assign({}, v, {checked: stringArray.indexOf(v.value) !== -1 })

+0

它工作偏袒,返回以下內容:'[{「checked」:false},{「checked」:true},{「checked」:true}] - - 其他數據都不是映射。 –

+0

您針對的是ES6? 'Object.assign'基本上是對兩個對象進行淺層「合併」,但僅在ES6中可用。如果沒有,你必須得到一個polyfill –

+0

polyfill在那裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign –

0

我會出於代碼清晰度和性能原因建議收集ES6 Set對象中的值。

基本上你在這裏有兩個選擇:修改陣列或複製它。例如兩個:

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);