如何比较和匹配"incomingArray"多维数组"任务项和订单"与refer



如何比较和匹配incomingArray多维数组task items and orders与referenceArray任务和订单项匹配?我试过下面的代码,但它不起作用!js中有没有简单的多维数组匹配?

var incomingArray = [
{ "task1": "Task A", "order": "1" },
{ "task2": "Task D", "order": "2" },
{ "task3": "Task C", "order": "3" },
{ "task4": "Task B", "order": "4" }
];
var referenceArray = [
{ "task1": "Task A", "order": "1" },
{ "task2": "Task B", "order": "2" },
{ "task3": "Task C", "order": "3" },
{ "task4": "Task D", "order": "4" }
];

function array_compare(incomingArray, referenceArray) {
if(incomingArray.length != referenceArray.length) {
return false;
}
for(var i in incomingArray) {
if(incomingArray[i] instanceof Array && referenceArray[i] instanceof Array) {
if(!array_compare(incomingArray[i], referenceArray[i])) {
return false;
}
}
else if(incomingArray[i] != referenceArray[i]) {
return false;
}
}
return true;
}

它不是多维数组。它是一个包含n个字段的对象数组。当你假设它们的顺序和长度相同时,很容易对它们进行比较。

function arraysAreEqual(arrayA, arrayB) {
for (let index = 0; index < arrayA.length; index++) {
if (arrayA[index].order !== arrayB[index].order ||
arrayA[index]['task' + (index + 1)] !== arrayB[index]['task' + (index + 1)]){
console.log('the arrays are unequal at index: ', index);
console.log('ArrayA: ', arrayA[index]);
console.log('ArrayB: ', arrayB[index]);
return false;
}
}
console.log('the arrays are equal.');
return true;
}

如果您想比较它们并精确匹配,可以使用.forEach并在两个数组上迭代,比较for循环中的每个对象,并分配一个输出变量。

var incomingArray = [
{task1: "Task A",order: "1"},
{task2: "Task D",order: "2"},
{task3: "Task C",order: "3"},
{task4: "Task B",order: "4"}
];
var referenceArray = [
{task1: "Task A",order: "1"},
{task2: "Task B",order: "2"},
{task3: "Task C",order: "3"},
{task4: "Task D",order: "4"}
];
var difIncomingArray = [
{task1: "Task A",order: "1"},
{task2: "Task B",order: "2"},
{task3: "Task C",order: "3"},
{task4: "Task D",order: "4"}
];
var difReferenceArray = [
{task1: "Task A",order: "1"},
{task2: "Task B",order: "2"},
{task3: "Task C",order: "3"},
{task4: "Task D",order: "4"}
];
function arrayCompare(a, b) {
let output = false
a.forEach((x, i) => {
for (let j in x) {
x[j] === b[i][j]?
output = true :
output = false
return
}
})
return output;
}
console.log(arrayCompare(incomingArray, referenceArray))
console.log(arrayCompare(difIncomingArray, difReferenceArray))

最新更新