如何检查对象中是否存在相同的字符串?

时间:2019-02-10 06:35:00

标签: javascript string object

使用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`);
        }
    });

我还尝试了遍历两个数组并进行比较,但是我无法挑选出不同的数组。

3 个答案:

答案 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);