数组删除与其他数组中的对象匹配的对象

时间:2017-07-18 12:10:55

标签: arrays node.js

我想删除对象,如果它们是相同的值 例如 第一个数组(disnicknames)

{ '1': { blko: 1 }, '13': { blko: 13 } }

第二个数组(昵称)

{ '1': { online: false, stest: 765767, thnick: 'kjjkjkj', userid: 1 },
  '13': { online: false, stest: 87, thnick: 'nnnmm', userid: 13 },'18': { online: true, stest: 56, thnick: 'iiii', userid: 18 }, }

我想从第二个数组中删除对象,如果用户标识或对象之前的数字,例如

  

'13':{bla:bla,...,...,..,}

是第一个数组中的一个数字,如1或13,因此最终输出应为

 { '18': { online: true, stest: 56, thnick: 'iiii', userid: 18 } }

所以我试着写这段代码

for (var i = 0, len = ol.length; i < len; i++) { 
        for (var j = 0, len2 = ol2.length; j < len2; j++) { 
            //console.log('disnicknames[j].blko',disnicknames[j].blko);
            if (nicknames[i].userid === disnicknames[j].blko) {
                nicknames.splice(j, 1);
                len2=ol2.length;
                //console.log()
                console.log('length1',ol.length);
                console.log('length2',ol2.length);

            }
        }
    }

但我收到此错误

  

TypeError:无法读取未定义

的属性“userid”

2 个答案:

答案 0 :(得分:1)

好的,我建议你这样做(如果你可以使用underscore.js):

_.forEach(nicknames, (value, key) => {
 _.forEach(disnicknames, (val, ke) => {
    if (key === ke) delete nicknames[key]
 })
})

答案 1 :(得分:1)

因为你实际上并不是迭代数组,而是一个对象。没有nicknames[i],因为它没有index而只有key。你必须通过它的键重复它

var disnicknames = { '1': { blko: 1 }, '13': { blko: 13 } };
var nicknames = { '1': { online: false, stest: 765767, thnick: 'kjjkjkj', userid: 1 }, '13': { online: false, stest: 87, thnick: 'nnnmm', userid: 13 },'18': { online: true, stest: 56, thnick: 'iiii', userid: 18 } };
for (var key1 in nicknames) {
  if (nicknames.hasOwnProperty(key1)) {
    for (var key2 in disnicknames) {
      if (disnicknames.hasOwnProperty(key2)) {
        if (key2 == key1) {
          delete nicknames[key1];
        }
      }
    }
  }
}
console.log(nicknames);