所以我有两个长度相同但数据不完全相同的数组,如下所示:
Array1: [{name: john, num: 030}, {name: david, num: 130}, {name: john, num: 200}, {name: jane, num: 500}]
Array2: [{name: john, num: 030}, {name: david, num: 130}, {name: jane, num: 500}, {name: '', num: ''}]
Array2只有num与Array1 num 匹配的元素
有没有办法确保这两个数组匹配它们的索引,即使数据与不匹配
例如,他们的索引看起来像这个
Array1: [{name: john, num: 030}, {name: david, num: 130}, {name: john, num: 200}, {name: jane, num: 500}]
Array2: [{name: james, num: 030}, {name: frank, num: 130}, {name: '', num: ''}, {name: kate, num: 500},]
这意味着它们通过索引匹配,并保持顺序。主要目标是Array2维持Array1的秩序。
根据问题中的描述,列出两个逻辑
- 属性num的值在每个数组中都是唯一的
- 唯一的例外是一个空字符串
我根据上面的逻辑实现了它,你可以看看它是否对你有帮助,如果逻辑不符合你的实际需求,你可以提供更多的细节和清晰的逻辑,我会调整它
const array1 = [{name: 'john', num: '030'}, {name: 'david', num: '130'}, {name: 'john', num: '200'}, {name: 'jane', num: '500'}];
let array2 = [{name: 'david', num: '130'}, {name: 'jane', num: '500'}, {name: 'john', num: '030'}, {name: '', num: ''}];
const originalLength = array2.length;
const originalArr = array2.slice(0, originalLength);
array2.length = originalLength * 2;
const provide = (arr, field, index) => {
let result = arr.filter(a => a[field] == array1[index][field]);
if(result.length == 0){
result = arr.filter(a => a[field] == '');
}
return result[0];
};
for(let i=0; i<array1.length ; i++)
{
const item = provide(originalArr, 'num', i);
array2[i] = item;
}
array2.length = originalLength;
console.log(JSON.stringify(array2));