获取不在数组中的值

时间:2017-08-09 14:21:52

标签: javascript

给定两个数组:(onetwo)。

one:包含值

two:包含值为

的对象

我需要从one获取不在two中的值。我已尝试使用.filter().indexOf(),但未获得所需的结果。

在以下情况中,我希望result的值为333。怎么实现呢?



var one = [111, 222, 333, 444];
var two = [
  { identifier: 111 },
  { identifier: 222 },
  { identifier: 444 }
];

var result = two.filter(function (item) {
    console.log(item.identifier, one.indexOf(item.identifier));
});

console.log('result: ', result);




8 个答案:

答案 0 :(得分:2)

我会从one中提取标识符值,然后在var one = [111, 222, 333, 444]; var two = [ { identifier: 111 }, { identifier: 222 }, { identifier: 444 } ]; // get a flattened array of identifier values [111, 222, 444] const identifiers = two.map((item) => item.identifier); var result = one.filter(function (item) { console.log(item, identifiers.indexOf(item) === -1); return identifiers.indexOf(item) === -1; }); console.log('result: ', result);上运行过滤器:

cn.Open

答案 1 :(得分:2)

return您没有Boolean .filter()个值。

您可以迭代one数组,并可以使用.some()!运算符来检查当前值是否存在于two数组"identifier"属性



var one = [111, 222, 333, 444];
var two = [
  { identifier: 111 },
  { identifier: 222 },
  { identifier: 444 }
];

var result = one.filter(function (item) {
    return !two.some(function(el) {
      return el.identifier === item
    })
});

console.log('result: ', result);




答案 2 :(得分:1)

只需执行您想要的操作,过滤one并仅使用不在two中的two(在true中找到它,如果发现它将返回对象,即undefined如果没有找到等效,那么它将返回false,即!等效,并否定var one = [111, 222, 333, 444]; var two = [ { identifier: 111 }, { identifier: 222 }, { identifier: 444 } ]; var resultArr = one.filter(function(val){ return !two.find(function(obj){ return val===obj.identifier; }); }); console.log(resultArr)它)

n_of_rows * n_of_columns

答案 3 :(得分:1)

您可以过滤数组one,返回数组two中找不到的元素。

代码:

const one = [111, 222, 333, 444];
const two = [{identifier: 111},{identifier: 222},{identifier: 444}];
const result = one.filter(oneElem => !two.find(twoElem => oneElem === twoElem.identifier));

console.log('result: ', result);

答案 4 :(得分:1)

您可以使用Set并过滤one的值。

var one = [111, 222, 333, 444],
    two = [{ identifier: 111 }, { identifier: 222 }, { identifier: 444 } ],
    result = one.filter((s => a => !s.has(a))(new Set(two.map(o => o.identifier))));

console.log(result);

答案 5 :(得分:0)

您可以先将变量映射到

var one = [111, 222, 333, 444];
var two = [
  { identifier: 111 },
  { identifier: 222 },
  { identifier: 444 }
];
two = two.map(function(item) {
  return item.identifier;
});

var result = one.filter(function (item) {
    return two.indexOf(item) == -1;
});

console.log('result: ', result);

答案 6 :(得分:0)

您可以使用数组2中的所有值创建临时数组。然后使用indexOf检查数组1中的任何值是否在数组二中丢失

<div id="editor">
  <p>Hello World!</p>
  <p>Some initial <strong>bold</strong> text</p>
  <p><br></p>
</div>

答案 7 :(得分:0)

var one = [111, 222, 333, 444];
var two = [
  { identifier: 111 },
  { identifier: 222 },
  { identifier: 444 }
];

vals = two.map(e=>{ return e['identifier']})

val = one.filter(e => { return vals.indexOf(e) == -1})
console.log(val)

将值映射到数组中,然后过滤第一个数组。