根据键值的存在从数组中删除元素

时间:2019-02-15 01:23:11

标签: javascript arrays json object ecmascript-6

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

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或过滤器)。

我先感谢您的帮助:)

5 个答案:

答案 0 :(得分:3)

您可以使用.filter进行销毁,以仅通过保留NewsID给出真实值的对象来过滤出未定义的值(如果NewsID不存在,则为未定义) ,因此为假)。

此外,您可以使用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)

答案 1 :(得分:0)

我可能会误解了您的问题,因为打印输出确实很难读取。


看起来您有一个对象列表,并且想要删除没有特定键的对象,对吗?

您可以通过以下方式进行操作:

result = arr.filter(obj => "NewsID" in obj)

如果您想了解更多有关如何检查对象是否具有键的信息,那么这似乎是一个不错的起点:Checking if a key exists in a JavaScript object?

答案 2 :(得分:0)

在对象的return new DropdownMenuItem<String>( value: value, child: new Text(value), isExpanded: true, ); 上使用简单的布尔过滤器:

Object.values

答案 3 :(得分:0)

您有一个数组,该数组具有对象的不同类型和不同类型的值。 首先,您需要检查数组中的值是否是对象的实例。

function convertToArray(data) {
  let arr = [];
  Object.keys(data).map(function(key){
     arr.push(data[key]);
  });
  return arr;
}
var obj = {
   0:  { NewsID: 90, AnotherAttribute: 5},
   1: {NewsID: 90, AnotherAttribute: 5}, 
   2: {NewsID: 90, AnotherAttribute: 5}, 
   hideTitle: false, 
   template: "football-news", customProperties: {template: "list-view"}
};
var arr = convertToArray(obj);
var filterarr = arr.filter(a => a instanceof Object && ("NewsID" in a));
console.log(filterarr);

答案 4 :(得分:0)

尝试一下:

var arr = [
  {NewsID: 90, AnotherAttribute: 5},
  {NewsID: 90, AnotherAttribute: 5},
  {NewsID: 90, AnotherAttribute: 5},
  false,
  "football-news",
  {template: "list-view"}
];

var result = arr.filter(item => item instanceof Object && ("NewsID" in item));
console.log(result);