У моїй програмі я маю список елементів, які будуть переведені в масив під час перевірки цього, і будуть видалені з масиву, якщо не встановлено прапорець. Ось код
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
angular.forEach(order, function (value,key) {
if (value == data) {
delete order[key];
}
})
}
Проблема полягає в тому, що коли 5-й елемент масиву буде видалений, масив назавжди буде відсутній у цьому ключі, і тому, коли я відображаю його в шаблоні за допомогою angularjs
він покаже порожній рядок у місці або відсутній 5-й елемент. Як я можу переставити масив після видалення елемента.
Відповіді:
0 для відповіді № 1if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
order.splice(order.index(data),1);
}
0 для відповіді № 2
Пам'ятайте, ніколи не використовуйте delete для видалення елементів з масиву. Оскільки він видалить елемент, що залишається невизначеним під ключем. Таким чином, ви можете зростити його або відфільтрувати.
Відфільтруйте:
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
order = order.filter(function(v){
return v !== data;
});
}
З'єднайте його
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
order.splice(order.indexOf(data),1);
}
delete використовується для видалення властивості з об’єкта.
0 для відповіді № 3
Припускаючи, що всі значення у вашому масиві унікальні, ви можете зробити це так:
if(data.selectedInsertion) {
order.push(data);
} else {
order.splice(order.indexOf(data),1)
}
Array.splice видаляє елементи з масиву. Перейдіть за цим посиланням для отримання додаткової інформації: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
Якщо data
не є унікальним, видаляється лише перший випадок із масиву.
Крім того, ви можете залишити явні перевірки на наявність true
і false
, тим більше, що це, здається, логічне значення.