gpt4 book ai didi

javascript - 检查数组是否具有另一个数组的键值对

转载 作者:行者123 更新时间:2023-12-03 02:40:18 25 4
gpt4 key购买 nike

我有两组数组:

var a = [1, 2, {a: 1, b:2}, 3];
var b = [1, {a: 1, b: 2}, 3};

如果数组 a 具有数组 b (包括对象)的全部(精确)属性和值,那么它将把 count 加 1。否则,如果数组 a 仅具有某些属性并且某些值不匹配,则它只会退出并且不执行任何操作。

举个例子:

var a = [1, 2, {a: 1, b:2}, 3];
var b = [1, {a: 1, b: 2}, 3};
// return true / count++

var a = [1, 2, 3, {a: 1, b: 4}];
var b = [1, 2, {a: 1, b: 6}, 3];
return false / no count

首先是我的程序:

for(var i = 0; i < mainArr[i]; i++){
if(arr.includes(mainArr[i])){
count++;
}

if(typeof(mainArr[i]) === 'object' && typeof(arr[i]) === 'object'){
for(var mainArrProp in mainArr[i]){
for(var arrProp in arr[i]){
if(arr[i].hasOwnProperty(mainArrProp) && arr[i][arrProp] === mainArr[i][mainArrProp]){
count++;
}
}
}
}
}

有办法解决这个问题吗?

最佳答案

如果您可以使用 es6,您可以利用一些新方法来创建一个(相对)较短的函数来执行此操作。具体来说,我们将使用数组 includeseverysome 方法来检查浅对象相等性:

function getIncrementValue(set, subset) {
for (let item of subset) {
if (typeof item === "object") {
// Special case if looking at an object. I am assuming object is always shallow.
if (!set.some(otherItem => typeof otherItem === "object" && Object.keys(otherItem).length === Object.keys(item).length && Object.keys(otherItem).every(key => (key in item) && item[key] === otherItem[key]))) return 0;
} else {
if (!set.includes(item)) return 0;
}
}

return 1;
}

// So for your arrays:

var a1 = [1, 2, {a: 1, b:2}, 3];
var b1 = [1, {a: 1, b: 2}, 3];
// return true / count++

var a2 = [1, 2, 3, {a: 1, b: 4}];
var b2 = [1, 2, {a: 1, b: 6}, 3];
// return false / no count

console.log(getIncrementValue(a1, b1)) // returns 1;
console.log(getIncrementValue(a2, b2)) // returns 0;

除了检查对象相等性的一长行之外,这非常简单。但所有内容都是:

如果 set 中没有某个元素:

  • 是一个对象,并且
  • 该元素和当前项目具有相同数量的键,并且
  • 该元素的每个键都是我们当前项目的键,并且
  • 每个键的值相同

然后返回1。

关于javascript - 检查数组是否具有另一个数组的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com