Javascript удаляет элемент объекта из массива чистым способом (не оставляя нулевого призрака) - PullRequest
0 голосов
/ 12 октября 2019

У меня есть массив:

var Array = {};
Array['elements'] = [];
Array['elements'][0]['name'] = "Sally";
Array['elements'][0]['age'] = "20";
Array['elements'][3]['name'] = "Jack";
Array['elements'][3]['age'] = "21";
Array['elements'][4]['name'] = "Megan";
Array['elements'][4]['age'] = "22";

Я не знаю, как удалить Джек из массива, чтобы получить список только женщин. Splice является изменяемым, и передача всего объекта назад кажется неэффективной и громоздкой.

В PHP вы можете:

unset($Array['elements'][3]);

Я пытался

delete Array['elements'][3];

, но это просто возвращает нулевое значение вместо него, не удаляя элемент,испортить везде, я проверяю на элементы. Есть ли чистый способ удалить элемент из массива на основе его ключа?

Спасибо!

Ответы [ 4 ]

1 голос
/ 12 октября 2019

если вы хотите удалить Джек из массива, вы можете кодировать так:

Array ['elements']. Filter (e => e.name! = 'Jack');

1 голос
/ 12 октября 2019

Попробуйте, он использует сплайс, но оставит исходный массив таким, какой он есть -

let array = [];
array.push({name:'Sally', age:20});
array.push({name:'Jack', age:21});
array.push({name:'Megan', age:22});
let newArray = [...array];
newArray.splice(1, 1);

Проверьте эту статью https://jaketrent.com/post/remove-array-element-without-mutating/

1 голос
/ 12 октября 2019

Во-первых, не используйте Array в качестве имени переменной - это объект массива javascript, вы не хотите его переопределять

Во-вторых, начиная с Array = {}, называя его любой вариациейслово Array вводит в заблуждение, это объект

В-третьих, вы создали Array.elements в виде массива, но затем заполнили только индексы 0, 3 и 4 - поэтому вы создали разреженный массивдля начала

В-четвертых, написанный вами код даже не запускается, так как вы пытаетесь присвоить .name elements[0], но в этот момент elements[0] не определено, так что вы получитес ошибкой, и код тут же перестает работать

То, что вы хотите, выглядит так: Array.elements = {} - тогда вы можете добавить / удалить любой ключ , который вы хотите

Например

var obj = {};
obj.elements = {};
obj.elements[0] = {};
obj.elements[0].name = "Sally";
obj.elements[0].age = "20";
obj.elements[3] = {};
obj.elements[3].name = "Jack";
obj.elements[3].age = "21";
obj.elements[4] = {};
obj.elements[4].name = "Megan";
obj.elements[4].age = "22";

delete obj.elements[3];

for (let i in obj.elements) {
    console.log('Number', i, 'is', obj.elements[i].name);
}

При использовании элементов в качестве массива вы увидите, что после первоначального заполнения массива у вас уже есть два undefined для начала - смотритепервый вывод консоли

Примечание: однако цикл for...in пропустит эти undefined элементы

Также обратите внимание, что неопределенные элементы на самом деле являются "пустыми слотами" - т.е. если выПроще говоря obj.elements[3] = undefined это не то же самое, что delete obj.elements[3]

var obj = {};
obj.elements = [];
obj.elements[0] = {};
obj.elements[0].name = "Sally";
obj.elements[0].age = "20";
obj.elements[3] = {};
obj.elements[3].name = "Jack";
obj.elements[3].age = "21";
obj.elements[4] = {};
obj.elements[4].name = "Megan";
obj.elements[4].age = "22";

console.log(obj.elements)

delete obj.elements[3];

console.log(obj.elements)
for (let i in obj.elements) {
    console.log('Number', i, 'is', obj.elements[i].name);
}
0 голосов
/ 12 октября 2019

Вы можете удалить элементов из массива путем сращивания it:

var a = [1,2,3,4,5]
var removed = a.splice(1,2)

a становится:

[1,4,5]

Иremoved содержит:

[2,3]

Вы можете выбрать новый отфильтрованный список, обратившись к ответу Нидина .


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

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