我有一个已转换为数组的对象
使用这个

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/

10-09 16:37