给定两个数组:(one
和two
)。
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);

答案 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)
将值映射到数组中,然后过滤第一个数组。