удалить элемент из массива в JavaScript на основе другого массива - PullRequest
0 голосов
/ 09 мая 2018

Я хочу полностью удалить элемент из списка, ниже приведен список

var list = [{id: 1, match_number: 1, name: "match1"},
     {id: 2, match_number: 2, name: "match2"},
     {id: 3, match_number: 3, name: "match3"},
     {id: 4, match_number: 4, name: "match4"},
     {id: 5, match_number: 5, name: "match5"}]

Я хочу полностью удалить match_number из списка и хочу достичь, как

var list = [{id: 1, name: "match1"},
     {id: 2, name: "match2"},
     {id: 3, name: "match3"},
     {id: 4, name: "match4"},
     {id: 5, name: "match5"}]

Ниже приведен код, в котором я добился результата для одного элемента, но у меня есть массив, в котором ключ дан как ['match_number','id']. на основании этого я хочу удалить элемент из основного списка.

Как я могу решить это?

//code for single item
var listitem = list.map((i) => {
    const {match_number,...item} = i;
    return item;
});

Ответы [ 4 ]

0 голосов
/ 09 мая 2018

Jquery + ES6

Вы также можете использовать $.map(), чтобы получить требуемый результат, используя оператор delete.

DEMO

var list = [{id: 1, match_number: 1, name: "match1"},
 {id: 2, match_number: 2, name: "match2"},
 {id: 3, match_number: 3, name: "match3"},
 {id: 4, match_number: 4, name: "match4"},
{id: 5, match_number: 5, name: "match5"}]

let removeKeys = ['match_number','id'];
let result = $.map(list,(o)=>{
	$.each(removeKeys, (i,v)=> delete o[v]);
	return o;
},[]);

console.log(result);
.as-console-wrapper {max-height: 100% !important;top: 0;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

ES6

Вы также можете использовать reduce() метод массива, чтобы получить требуемый результат. С использованием concat() и delete.

DEMO

var list = [{id: 1, match_number: 1, name: "match1"},
 {id: 2, match_number: 2, name: "match2"},
 {id: 3, match_number: 3, name: "match3"},
 {id: 4, match_number: 4, name: "match4"},
{id: 5, match_number: 5, name: "match5"}]

let removeKeys = ['match_number','id'];
let result = list.reduce((r,o)=>{
	removeKeys.forEach(v=> delete o[v]);
	return r.concat(o);
},[]);

console.log(result);
.as-console-wrapper {max-height: 100% !important;top: 0;}
0 голосов
/ 09 мая 2018

Сохраните атрибуты для удаления в массиве, как attrToRemove ниже, и используйте delete вместе с map и forEach

var list = [
 {id: 1, match_number: 1, name: "match1"},
 {id: 2, match_number: 2, name: "match2"},
 {id: 3, match_number: 3, name: "match3"},
 {id: 4, match_number: 4, name: "match4"},
{id: 5, match_number: 5, name: "match5"}
];

var attrToRemove =  ['match_number','id'];

list.map(obj => attrToRemove.forEach(val=> delete obj[val]));

console.log(list);
0 голосов
/ 09 мая 2018

Вы можете перебирать свои ключи и удалять их, используя destructuring и rest:

var list = [
 {id: 1, match_number: 1, name: "match1"},
 {id: 2, match_number: 2, name: "match2"},
 {id: 3, match_number: 3, name: "match3"},
 {id: 4, match_number: 4, name: "match4"},
 {id: 5, match_number: 5, name: "match5"}
];
var keys =  ['match_number', 'id'];

list = list.map(item => {
    var x, rest = item;
    keys.forEach(key => {
        ({ [key]: x, ...rest } = rest);
    });
    return rest;
});

console.log(list);
0 голосов
/ 09 мая 2018

Используйте map в массиве list, чтобы изменить существующий массив объектов, чтобы не иметь ключа match_number.

var list = [
 {id: 1, match_number: 1, name: "match1"},
 {id: 2, match_number: 2, name: "match2"},
 {id: 3, match_number: 3, name: "match3"},
 {id: 4, match_number: 4, name: "match4"},
{id: 5, match_number: 5, name: "match5"}
];

list.map(obj => delete obj.match_number);
console.log(list);

Для вашего массива ключей, который вы хотите удалить, а также для того, чтобы не влиять на исходный массив list, вы можете использовать это,

var list = [
 {id: 1, match_number: 1, name: "match1"},
 {id: 2, match_number: 2, name: "match2"},
 {id: 3, match_number: 3, name: "match3"},
 {id: 4, match_number: 4, name: "match4"},
{id: 5, match_number: 5, name: "match5"}
];
var res = [];
var removeArray = ['match_number','id'];
list.forEach((obj) => {
  let tempObj = {};
  Object.keys(obj).forEach((key)=>{
    if(removeArray.indexOf(key) === -1){
      tempObj[key] = obj[key];
    }
  });
  res.push(tempObj);
});
console.log(res);
console.log(list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...