Подтвердить что ты не робот

Использование jQuery inArray с массивом объектов JavaScript

Я работаю с массивом объектов 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 из массива, пока я знал определенное значение свойства в этом объекте. В приведенном выше решении используется jQuery grep для возврата всего из массива, за исключением любого объекта, чей идентификатор == "2" . Как обычно, спасибо за быстрые ответы. Ответы пары были хорошими решениями и работали бы с использованием (например, "сплайсинга" ), но это решение кажется самым коротким самым простым. Еще раз спасибо.

4b9b3361

Ответ 1

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

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

Ответ 2

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

$.each(IssuesArray, function(i, item){
  if (item.ID == IDToBeRemoved) IssuesArray.splice(i, 1);
});

Ответ 3

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));

Ответ 4

Без использования 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++]);
  }
}

Ответ 5

Simplify??

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

Почему список хэшей, когда будет выполняться один хэш?