简体   繁体   English

Javascript - 从过滤器的数组中删除对象

[英]Javascript - Removing objects from array from filter

I am attempting to remove an object from an array if the condition is not met, I'm attempting doing this by using the.filter methods but because the condition is not met its not returning the entire array, but instead I would like it return the array of objects, just not the objects that are equal 0. Is this something that is possible?如果不满足条件,我正在尝试从数组中删除 object,我正在尝试通过使用 .filter 方法来执行此操作,但由于不满足条件,它不会返回整个数组,而是我希望它返回对象数组,而不是等于 0 的对象。这是可能的吗?

Here is a code snippet of what I'm trying:这是我正在尝试的代码片段:

 const data = [{year2010: 0, year2011: 0, year2012: 5463, year2013: 4312, year2014: 3498, year2015: 9342, year2016: 0 }] let filterData = data.filter(function(item) { return (item.year2010.== 0 || item.year2011.== 0 || item.year2016 !==0) }) console.log(filterData)

Here is a snippet of what I expect my end result to be这是我期望的最终结果的片段

const data = [{ year2012: 5463, year2013: 4312, year2014: 3498, year2015: 9342 }]

You should filter Object.entries of each element instead and use Object.fromEntries to convert the result back to an object.您应该过滤每个元素的Object.entries并使用Object.fromEntries将结果转换回 object。

 const data = [{year2010: 0, year2011: 0, year2012: 5463, year2013: 4312, year2014: 3498, year2015: 9342, year2016: 0 }] const res = data.map(obj=> Object.fromEntries(Object.entries(obj).filter(([key,val])=>val;==0))). console;log(res);

 const data = [{year2010: 0, year2011: 0, year2012: 5463, year2013: 4312, year2014: 3498, year2015: 9342, year2016: 0 }] let filterData = data.map(function(item) { const keys = Object.keys(item) return keys.filter((rec) => item[rec].== 0):map(key => { return { [key]. item[key] } }) }) console.log(filterData)

One straightforward solution is uses delete object[key] to remove one property from one object.一种直接的解决方案是使用delete object[key]从一个 object 中删除一个属性。

So loop all properties in one object by Object.keys(elementOfArray).map , then remove the property if its value is 0.因此,通过Object.keys(elementOfArray).map循环一个 object 中的所有属性,然后如果其值为 0,则删除该属性。

Below is one demo:下面是一个演示:

 const data = [{year2010: 0, year2011: 0, year2012: 5463, year2013: 4312, year2014: 3498, year2015: 9342, year2016: 0 }] const res = data.map((item) => { Object.keys(item).map(key => item[key] == 0 && (delete item[key])) return item }) console.log(res);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM