Использование jQuery inArray с массивом объектов JavaScript - PullRequest
21 голосов
/ 18 ноября 2009

Я работаю с массивом объектов JavaScript как таковых:

var IssuesArray = [{"ID" : "1", "Name" : "Issue1"}, 
                   {"ID" : "2", "Name" : "Issue2"}, 
                   {"ID" : "3", "Name" : "Issue3"}];

Мое конечное усилие - попытаться удалить объект из массива, когда я знаю идентификатор объекта. Я пытаюсь использовать код, который выглядит примерно так:

$.grep(IssuesArray, function(n, i) {
    return i != $.inArray("2", IssuesArray);
});

Итак, это показывает, что я пытаюсь использовать jQuery grep для удаления элемента по индексу (i), который я пытаюсь получить с помощью jQuery inArray. Конечно, приведенный выше код не будет работать, потому что «2» должно соответствовать элементу в массиве, которые все являются объектами JavaScript (объект никогда не будет равен «2»). Мне нужно что-то вроде:

$.inArray(javascriptObject.Name=="2", IssuesArray);

Кто-нибудь когда-либо имел успех с использованием inArray для получения индексов объектов JavaScript, используя значение поля внутри этого объекта? Любая помощь будет оценена. Благодаря.

ОБНОВЛЕНИЕ / УТОЧНЕНИЕ: Несколько человек были смущены моим вопросом, но я получил ответ, который, тем не менее, работает. Я использую:

IssuesArray = $.grep(IssuesArray, function(n) {
    return n.ID != "2";
});

Я думаю, что слишком долго думал об этом, когда решение было действительно довольно простым. Я просто хотел удалить объект JavaScript из массива, пока я знал значение определенного свойства в этом объекте. Вышеупомянутое решение использует grep jQuery для возврата всего из массива, кроме любого объекта, чей ID == "2". Как обычно, спасибо за быстрые ответы. Несколько ответов были хорошими решениями и сработали бы с использованием (например, с использованием «сращивания»), но это решение кажется самым коротким и простым. Еще раз спасибо.

Ответы [ 5 ]

34 голосов
/ 18 ноября 2009

n - ваш элемент списка, поэтому что-то вроде этого должно сделать работу:

$.grep(issuesArray, function(n) { return n.ID != "2"; })
6 голосов
/ 18 ноября 2009

Не уверен, правильно ли я понял ваш вопрос, но я бы сделал:

$.each(IssuesArray, function(i, item){
  if (item.ID == IDToBeRemoved) IssuesArray.splice(i, 1);
});
2 голосов
/ 19 ноября 2009
var spliceID = function(id, arr) {
    $(arr).each(function(i, el) {
        if (el.ID == id) {
            arr.splice(i,1);
            return false;
        }
    });
    return arr;
}

console.log(spliceID('2', IssuesArray));
0 голосов
/ 19 ноября 2009

Simplify ??

var IssuesArray = {
  1: "Issue1",
  2: "Issue2", 
  3: "Issue3"
};
var issue2 = IssuesArray[2];

Зачем нужен список хэшей, если подойдет один хэш?

0 голосов
/ 18 ноября 2009

Без использования jQuery или других платформ:

var newArray = [];
var i=0, len=IssuesArray.length;
var bad_id = "2"; // or whatever
while(i<len) {
  if(IssuesArray[i].ID !== bad_id) {
    newArray.push(IssuesArray[i++]);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...