Как удалить определенный столбец из массива данных (JS)

1

У меня есть список

let list = [ 
{ 
  id: "247", 
  order_number: "21251", 
  tel: 13911111, 
  weight: "10kg" 
}, 
{ 
  id: "245", 
  order_number: "223", 
  tel: 31, 
  weight: "10kg" 
},
{ 
  id: "123", 
  order_number: "312312321", 
  tel: 3213123, 
  weight: "10kg" 
}
];

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

  • 0
    findIndex последующим splice , конечно, это достаточно просто?
  • 0
    Возможный дубликат Как удалить свойства из массива объектов? , хотя вы должны выбрать ответ с наибольшим количеством голосов, а не принятый или комментарий под ним - в вашем случае: list.map(({id, order_number, weight}) => ({id, order_number, weight})) ,
Теги:
arrays

5 ответов

3
Лучший ответ

Я бы возражал против использования ключевого слова delete, потому что вы бы мутировали список вместо создания нового, а также из-за его поведения, описанного в документации. Особенно эти строки о:

  • Любое свойство, объявленное с let или const, не может быть удалено из области, в которой они были определены
  • Если свойство с тем же именем существует в цепочке прототипов объекта, то после удаления объект будет использовать свойство из цепи прототипа (другими словами, удаление влияет только на собственные свойства).
  • Любое свойство, объявленное с помощью var, не может быть удалено из глобальной области или из области действия.

Вместо этого вы можете map().

listWithoutTel = list.map(({ tel, ...item }) => item);

Здесь вы должны использовать остальные параметры, чтобы поместить все свойства, кроме нежелательного (в данном случае tel) разрушенного объекта в переменную с именем item и немедленно вернуться.

  • 0
    если свойство похоже на 'tel num', как его обработать? @ Кристофер Франциско
  • 0
    Попробуйте map(({ 'tel num': tel, ...item }) =>......
1

Статическим способом:

let list = [
  {
    id: "27",
    order_number: "21251",
    tel: 13911111,
    weight: "10kg"
  },
  {
    id: "245",
    order_number: "223",
    tel: 31,
    weight: "10kg"
  },
  {
    id: "123",
    order_number: "312312321",
    tel: 3213123,
    weight: "10kg"
  }
];
let new_list = list.map(function(obj) {
  return {
    id: obj.id,
    order_number: obj.order_number,
    weight: obj.weight
  }
});

console.log(list);
console.log(new_list)

Таким образом, вы сохраняете как старый массив, так и новый массив.

Если вы хотите сделать это динамически, вы можете использовать forEach для проверки ключей.

0

Используйте оператор delete для удаления tel-ключа из всех объектов в цикле

let list = [ 
{ 
  id: "247", 
  order_number: "21251", 
  tel: 13911111, 
  weight: "10kg" 
}, 
{ 
  id: "245", 
  order_number: "223", 
  tel: 31, 
  weight: "10kg" 
},
{ 
  id: "123", 
  order_number: "312312321", 
  tel: 3213123, 
  weight: "10kg" 
}
];
var list2 = JSON.parse(JSON.stringify(list));
for(i in list2) {
   delete list2[i].tel;
}

console.log(list2);
console.log(list);
  • 2
    ОП указал новый список. Вы должны сначала создать поверхностную копию массива перед удалением tel
  • 0
    Обновил ответ. пожалуйста, проверьте сейчас @MaxK
0

Насколько я знаю, вы не найдете пути без зацикливания. Если вы думаете об этом, чтобы удалить ключ от каждого объекта, ему нужно будет перевернуть его, несмотря ни на что, даже если это всего лишь петля, замаскированная под простую функцию.

Что касается простоты, я бы рекомендовал использовать:

list.forEach(function(x){delete x.tel});

let list = [ 
{ 
  id: "247", 
  order_number: "21251", 
  tel: 13911111, 
  weight: "10kg" 
}, 
{ 
  id: "245", 
  order_number: "223", 
  tel: 31, 
  weight: "10kg" 
},
{ 
  id: "123", 
  order_number: "312312321", 
  tel: 3213123, 
  weight: "10kg" 
}
];


list.forEach(function(x){ delete x.tel });

console.log(list);
  • 0
    Вы можете сделать это без зацикливания: Удалить атрибут для всех объектов в массиве . Вы даже можете сделать это с некоторыми настройками прокси .
  • 0
    Поправьте меня, если я ошибаюсь, но в этом случае, поскольку каждый объект имеет ключ, а не несколько избранных, не будет ли зацикливание столь же эффективным, как и другой метод, потому что в обоих случаях вы будете обращаться к каждому индексу?
Показать ещё 2 комментария
-2

Вы можете использовать ключевое слово delete.

delete myObject.prop

Ещё вопросы

Сообщество Overcoder
Наверх
Меню