Как перебрать массив объектов и проверить, существует ли имя? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть массив объектов с около 500 записей. Я хотел бы зациклить массив объектов и проверить, совпадает ли имя объекта с одним из элементов. Вот пример моего массива объектов:

data = [
      {
        "row": 23,
        "code": "ERT"
      },
      {
        "row": 45,
        "code": "TTR"
      },
      {
        "row": 90,
        "code": "CXZ"
      }
    ];

Вот что я попробовал:

data.some(function (obj) {
    if(obj.name === "code"){
        return obj[name]; // Return value if name exists
    }
});

Я хотел бы проверить, существует ли name в объекте. Если да, вытащите значение для этого имени. Мой код выдаст undefined в консоли. Может ли кто-нибудь помочь с этим? Есть ли способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Примерно так:

data = [
      {
        "row": 23,
        "code": "ERT"
      },
      {
        "row": 45,
        "code": "TTR"
      },
      {
        "row": 90,
        "code": "CXZ"
      }
    ];


$.each(data, function(index,v) {
 $.each(v, function(key,val) {
    if(key == "code")
       console.log(val)
    }
 });
});

без внутренней петли:

for (var key in data){

  if(key == "code"){
     console.log(key)
  }
}
0 голосов
/ 01 ноября 2018

Вы можете сделать что-то вроде этого:

const name = "code";
const data = [
      {
        "row": 23,
        "code": "ERT"
      },
      {
        "row": 45,
        "code": "CXZ"
      },
      {
        "row": 90,
        "code": "TTR"
      },
      {
        "row": 190,
        "code": "CXZ"
      }
    ];

const values = [];

data.forEach(element => {
	if (Object.keys(element).includes(name)) {
  	values.push(element[name]);
  }
});
    
console.log(values);

Object.keys захватывает все ключи объекта, а затем включает поиск «имени» в этих ключах.

0 голосов
/ 01 ноября 2018

Если я правильно понимаю ваш вопрос, то вы можете достичь этого с помощью .filter(), где для каждого фильтруемого элемента вы проверяете ключи элемента (через Object.keys()), чтобы увидеть, содержит ли он какие-либо из ключей, которые вы ' повторный поиск / фильтрация по:

var namesToCompare = ['name', 'code'];

var data = [
      {
        "row": 23,
        "code": "ERT"
      },
      {
        "row": 45,
        "code": "TTR"
      },
      {
        "row": 90,
        "code": "CXZ"
      },
      {
        "row": 91,
        "code": "ABC", 
        "name" : "code"
      }
    ];
    
var result = data
.filter(item => Object
    .keys(item)
    .find(key => namesToCompare.includes(key)))

console.log('items with keys', namesToCompare, 'in list', result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...