我有一个已转换为数组的对象
使用这个
convertToArray(data: any) {
let arr = [];
Object.keys(data).map(function(key){
arr.push(data[key]);
});
return arr;
}
这是结果
{0: {…}, 1: {…}, 2: {…}, hideTitle: false, template: "football-news", customProperties: {…}}
0: {NewsID: 90, AnotherAttribute: 5, …}
1: {NewsID: 90, AnotherAttribute: 5, …}
2: {NewsID: 90, AnotherAttribute: 5, …}
customProperties: {template: "list-view"}
hideTitle: false
template: "news"
__proto__: Object
至
(6) [{…}, {…}, {…}, false, "football-news", {…}]
0: {NewsID: 90, AnotherAttribute: 5, …}
1: {NewsID: 90, AnotherAttribute: 5, …}
2: {NewsID: 90, AnotherAttribute: 5, …}
3: false
4: "news"
5: {template: "list-view"}
length: 6
__proto__: Array(0)
我想删除任何没有NewsID键的项目(arr.pop或过滤器)。
我非常感谢任何帮助:)
最佳答案
您可以将.filter()
与解构赋值一起使用,以过滤出未定义的值,方法是仅保留NewsID
提供真实值的对象(此处NewsID
如果不存在,则为未定义,因此为false)。
此外,您可以使用convertToArray
改进Object.values()
方法。无需两次遍历您的键/值。
请参见下面的工作示例:
function convertToArray(data) {
return Object.values(data);
}
const myObj = {
0: {
NewsID: 90,
AnotherAttribute: 5
},
1: {
NewsID: 90,
AnotherAttribute: 5
},
2: {
NewsID: 90,
AnotherAttribute: 5
},
customProperties: {
template: "list-view"
},
hideTitle: false,
template: "news"
},
arr = convertToArray(myObj),
res = arr.filter(({NewsID}) => NewsID);
console.log(res);
注意:
如果您的
NewsID
可以是0
,则应使用.filter(({NewsID}) => NewsID !== undefined)
进行检查。如果您的
NewsID
可以具有明确的值undefined
(例如:您使用{NewsID: undefined}
),则应使用.filter((obj) => obj instanceof Object && "NewsID" in obj)
关于javascript - 根据键值的存在从数组中删除元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54701467/