Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果某个属性包含某些值,请删除数组元素_Javascript_Lodash - Fatal编程技术网

Javascript 如果某个属性包含某些值,请删除数组元素

Javascript 如果某个属性包含某些值,请删除数组元素,javascript,lodash,Javascript,Lodash,我有以下变量: var data = [{id: '1', name: 'demo1'}, {id: '2', name: 'demo2'}, {id: '3', name: 'demo3'}] 现在我有了另一个ids列表 var lookFor = ["2", "3"]; 现在,从data中,我将如何删除id的lookFor数组中不可用的id对象 我试着用下面的方法 _.filter(data, function(item) { return _.contains(lookFor, '

我有以下变量:

var data = [{id: '1', name: 'demo1'}, {id: '2', name: 'demo2'}, {id: '3', name: 'demo3'}]
现在我有了另一个
id
s列表

var lookFor = ["2", "3"];
现在,从
data
中,我将如何删除
id
lookFor
数组中不可用的
id
对象

我试着用下面的方法

_.filter(data, function(item) {
  return _.contains(lookFor, 'id');
});
还有其他方法吗?

您可以使用for数组和方法

确定数组是否包含某个元素

结果

 [{id: "1", name: "demo1"}]
对立面

var res =  data.filter(el=>lookFor.includes(el.id));

UHM考虑以下几点?

var data = [{id: '1', name: 'demo1'}, {id: '2', name: 'demo2'}, {id: '3', name: 'demo3'}];
var keys = ["2", "3"];

let filteredArray = data.filter(element => keys.indexOf(element.id) != -1);
console.log(filteredArray);

// Output is now 
// 0: {id: "2", name: "demo2"}
// 1: {id: "3", name: "demo3"}
使用此选项可以得到相反的结果:

let filteredArray = data.filter(element => keys.indexOf(element.id) == -1);
console.log(filteredArray);

// Output is:
// 0: {id: "1", name: "demo1"}
这就是你想要的吗

祝你度过愉快的一天,Elias

你可以使用以下方法。请注意,这会改变
数据的值

var data=[{id:'1',name:'demo1'},{id:'2',name:'demo2'},{id:'3',name:'demo3'}];
var lookFor=[“2”,“3”];
_.删除(数据、功能(n){
返回u.indexOf(lookFor,n.id)=-1;
});
控制台日志(数据)

这里仅举几个示例,说明如何仅使用ES6或使用
lodash
实现这一点。显然有更多的方法可以做到这一点,但这些方法应该会给你一个想法。还要注意的是,大多数示例
不会改变所使用的数组:

var data=[{id:'1',name:'demo1'},{id:'2',name:'demo2'},{id:'3',name:'demo3'}]
var lookFor=[“2”,“3”];
//不改变数组并使用ES6筛选器
var withFilter=data.filter(x=>lookFor.indexOf(x.id)>=0)
//不改变阵列并使用ES6 Reduce
var withReduce=lookFor.reduce((r,c)=>r.push(data.find(x=>x.id==c)| |[])和&r,[]))
//不使用Lodah过滤器对数组进行变异
var withLodashFilter=\.filter(数据,x=>\.includes(查找,x.id))
//使用Lodash Remove对阵列进行变异
var withLodashRemove=\.remove(数据,x=>\.includes(查找,x.id))
console.log('ES6 Filter',with reduce)
console.log('ES6 Reduce',带过滤器)
console.log('Lodah Filter',带LodashFilter)
console.log('lodashremove',with lodashremove)

实际上,您并没有使用
filter
删除任何元素,因为它使用过滤后的值创建了一个新数组。你真的想移除这些对象(改变数组)?那么你就可以心平气和地接受它作为答案了?=)
let filteredArray = data.filter(element => keys.indexOf(element.id) == -1);
console.log(filteredArray);

// Output is:
// 0: {id: "1", name: "demo1"}