Создание подмножества массива объектов JavaScript на основе одного из их свойств? - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть массив JavaScript объектов с одинаковыми свойствами каждый, что-то вроде этого:

box[0] = { name: 'somename', /* more properties... */ };
box[1] = { name: 'othername', /* more properties... */ };
box[2] = { name: 'onemorename', /* more properties... */ };
// more objects in the array...

Я хочу создать подмножество этого массива так, чтобы он содержал только объекты, которые соответствуют «списку» имен и скопируйте те, которые не относятся к другому массиву с именем cache, может быть.Я подумал, может быть, я мог бы сравнить этот массив объектов с другим массивом, который просто содержит список строк с желаемыми именами для сопоставления, проверяя свойство имени каждого объекта по этому списку, чтобы создать новый массив с соответствующими.Я не знаю, сработает ли это или это лучший подход для достижения того, чего я хочу, поэтому я прошу вашей помощи.Может быть, проверка каждого из 200-500 объектов по списку из 100 имен не очень хорошая вещь, я не знаю, на самом деле.

У вас есть какие-нибудь идеи о том, как я могу это сделать?еще лучше, вы можете привести мне пример?

Заранее спасибо.

1 Ответ

0 голосов
/ 04 февраля 2011

Если список имен, которые вы хотите, хранятся в массиве,

var wantedNames = [ "first name", "second name", .. ];

имеет два массива - те, которые соответствуют имени, и те, которые не соответствуют. Переберите каждый элемент в объекте box, и если он содержит имя из списка, включите его.

var objectsMatchingName = box.filter(function(item) {
    return wantedNames.indexOf(item.name) !== -1;
});

var cache = box.filter(function(item) {
    return objectsMatchingName.indexOf(item) === -1;
});

Хотелось бы, чтобы была какая-то операция по разнице в массивах, чтобы вы могли сделать (в псевдокоде):

var cache = box - objectsMatchingName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...