Видалення об'єкту з масиву з допомогою JavaScript

Як видалити об'єкт з масиву? Я хочу видалити об'єкт, що містить ім'я Kristian з деякого масиву. Наприклад:

someArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"John", lines:"1,19,26,96"}];

**Я хочу досягти

someArray = [{name:"John", lines:"1,19,26,96"}];
Рішення

Для видалення елементу(ів) з масиву можна використовувати декілька способів:

//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0, 1); // first element removed
//4
someArray.pop(); // last element removed
//5
someArray = someArray.slice(0, a.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed

Якщо потрібно видалити елемент з позиції x, використовуйте:

someArray.splice(x, 1);

Або

someArray = someArray.slice(0, x).concat(someArray.slice(-x));

Відповідь на коментар @chill182: видалити один або декілька елементів з масиву можна за допомогою Array.filter, або Array.splice у поєднанні з Array.findIndex (див. MDN), наприклад

// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" ); 
log("non destructive filter > noJohn = ", format(noJohn));
log(`**someArray.length ${someArray.length}`);

// destructive filter/reassign John removed > someArray2 =
let someArray2 = getArray();
someArray2 = someArray2.filter( el => el.name !== "John" );
log("", "destructive filter/reassign John removed > someArray2 =", 
  format(someArray2));
log(`**someArray2.length ${someArray2.length}`);

// destructive splice /w findIndex Brian remains > someArray3 =
let someArray3 = getArray();
someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);
someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);
log("", "destructive splice /w findIndex Brian remains > someArray3 =", 
  format(someArray3));
log(`**someArray3.length ${someArray3.length}`);

function format(obj) {
  return JSON.stringify(obj, null, " ");
}

function log(...txt) {
  document.querySelector("pre").textContent += `${txt.join("\n")}\n`
}

function getArray() {
  return [ {name: "Kristian", lines: "2,5,10"},
           {name: "John", lines: "1,19,26,96"},
           {name: "Brian", lines: "3,9,62,36"} ];
}
<pre>
**Results**

</pre>

;

Коментарі (8)

Чистим рішенням було б використання Array.filter:

var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; }); 

Проблема з цим полягає в тому, що він не працює в IE < 9. Однак ви можете включити код з бібліотеки Javascript (наприклад, underscore.js), який реалізує це для будь-якого браузера.

Коментарі (4)

Використовуйте функцію сплайсингу на масивах. Вказати позицію початкового елемента і довжину підпослідовності, яку потрібно видалити.

someArray.splice(pos, 1);
Коментарі (0)