我有兩個陣列這樣基於一個數組對象的鍵和其他數組對象的值創建一個更多的新數組?
arr1 = [
{
'name':'Victoria Cantrell',
'position':'Integer Corporation',
'office':'Croatia',
'ext':'0839',
'startDate':'2015-08-19',
'salary':208.178
},
{
'name':'Pearleeee',
'position':'In PC',
'office':'Cambodia',
'ext':'8262',
'startDate':'2014-10-08',
'salary':114.367
},
{
'name':'Pearl Crosby',
'position':'Integer',
'office':'Cambodia',
'ext':'8162',
'startDate':'2014-10-08',
'salary':114.367
}
]
arr2 =
[{
'name': 'name',
'checkfilter': false
},
{
'name': 'position',
'checkfilter': true
},
{
'name': 'office',
'checkfilter': true
},
{
'name': 'startDate',
'checkfilter': false
},
{
'name': 'ext',
'checkfilter': false
},
{
'name': 'salary',
'checkfilter': false
}]
基於checkfilter == TRUE我想產生第三陣列這樣
ARR3 =`
[{
name: 'position',
values: [{
checkName: 'Integer Corporation'
},
{
checkName: 'In PC'
},
{
checkName: 'Integer'
}]
},
{
name:'office',
values: [{
checkName: 'Croatia'
},
{
checkName: 'Cambodia'
}]
}
]
` 我試圖解決這個場景像這樣,但它不能正常工作
arr3=[]
this.arr2.forEach((column: any) => {
if (column.ischeckFilter === true) {
this.arr3.push({
name: column.name,
values: []
});
}
});
this.arr1.forEach((d: any) => {
this.arr2.forEach((column: any) => {
if (column.ischeckFilter === true) {
this.arr3.forEach((c: any) => {
// console.log(d[column.name], c.name, 'JJJJ');
// console.log(Object.keys(d), 'BBBBBBBBB');
let keys = Object.keys(d);
keys.forEach((k: any) => {
if (k === c.name) {
if (find(c.values, { 'checkName': d[column.name]}) === undefined) {
c.values.push({
checkName: d[column.name] ,
ischeck: false
});
}
}
});
});
}
});
});
console.log(this.arr3)
}
輸出數組值不應該包含任何重複,我用於每個循環,是否有任何最佳做法來解決這個情況,如decresing循環,因爲上面的數組長度是somuch,如果我使用更多的循環它增加了加載時間,所以請讓我知道如何解決這個問題的巧妙
在此先感謝
這裏設置的內容 – Runali
https://developer.mozilla.org/en -US/docs/Web/JavaScript/Reference/Global_Objects/Set在ES5中,我們可能使用了對象字面值'{x:true,y:true}',但是使用SE T的你可以省略'真實的'..除此之外還有更多的東西,一個主要的優點是集合還可以存儲任何類型/值作爲關鍵。 – Keith
這是可用的es6,因爲我使用es6,並獲得錯誤 – Runali