使用JavaScript /节点 我正在尝试一个函数检查字符串(x)是否在数组中的任何对象中。这是一个示例:
{
x: 'testx',
y: 'testy',
z: 'textz'
},
{
a: 'testa',
b: 'testb',
c: 'textc'
}
]
var arr2 = [
{
x: 'testx'
},
{
a: 'testa',
b: 'notb'
}
]
我想查看arr2的任何属性是否在arr 1对象内的任何属性内,如果属性不相同,只需登录到控制台。如果这令人困惑,那就太难了,我是JavaScript新手,很难解释:(
我已经尝试过了:
newProducts.each((i, el) => {
if (Object.values(arr).indexOf('testb') > -1) {
console.log(`has testb`);
}
});
我还尝试了遍历两个数组并进行比较,但是我无法挑选出不同的数组。
答案 0 :(得分:0)
在forEach
上使用arr1
,在内部使用for..in
。您在对象中的值表明您只想检查相同的索引对象
var arr1 = [{
x: 'testx',
y: 'testy',
z: 'textz'
},
{
a: 'testa',
b: 'testb',
c: 'textc'
}
]
var arr2 = [
{
x: 'testx'
},
{
a: 'testa',
b: 'notb'
}
]
arr1.forEach((obj,i) => {
for(let key in obj){
if(obj[key] === arr2[i][key]) console.log(obj[key])
}
})
答案 1 :(得分:0)
从arr1
创建一个对象,该对象将存储数组中的所有prop:values,因为arr2
中的所有props都需要遍历整个props:
const aggregatedArr1 = arr1.reduce((acc, o) => (Object.keys(o).forEach(k => acc[k] = o[k]), acc), {});
对于arr2
中的每个道具,请与aggregatedArr1
道具进行比较,如果匹配,则打印该道具的值:
arr2.forEach(obj => Object.entries(obj).forEach(([key, val]) => {
if (aggregatedArr1.hasOwnProperty(key) && aggregatedArr1[key] !== val) {
console.log(val);
}
}))
function main() {
const aggregatedArr1 = arr1.reduce((acc, o) => (Object.keys(o).forEach(k => acc[k] = o[k]), acc), {});
arr2.forEach(obj => Object.entries(obj).forEach(([key, val]) => {
if (aggregatedArr1.hasOwnProperty(key) && aggregatedArr1[key] !== val) {
console.log(val);
}
}))
}
var arr1 = [{
x: 'testx',
y: 'testy',
z: 'textz'
},
{
a: 'testa',
b: 'testb',
c: 'textc'
}
]
var arr2 = [{
x: 'testx'
},
{
a: 'testa',
b: 'notb'
}
]
main();
答案 2 :(得分:0)
解决方案在这里:
var arr1 = [{
x: 'testx',
y: 'testy',
z: 'textz'
},
{
a: 'testa',
b: 'testb',
c: 'textc'
}];
var arr2 = [
{
x: 'testx'
},
{
a: 'testa',
b: 'notb'
}
]
var set = {};
arr1.forEach((elem, index, arr)=> {
for(let key in elem) {
set[key] = elem[key];
}
});
let matches = {};
arr2.forEach((elem, index, arr) => {
for(let key in elem) {
if(set[key] === elem[key]) {
matches[key] = set[key];
}
}
})
console.log(matches);