Фильтрация одного значения и создание нового массива в JavaScript - PullRequest
0 голосов
/ 11 октября 2018

Я хочу отфильтровать одно значение из моего первого массива и создать второй массив с отфильтрованным значением.

Пока у меня есть это, но оно не кажется очень эффективным.

  const blacklist = bookingsList.filter(booking => booking.id === id);
  const newBookingList = bookingsList.filter(booking => booking.id !== id);

Есть ли лучший способ сделать это?

Ответы [ 6 ]

0 голосов
/ 11 октября 2018

let blacklist =  []
let newBookingList = []
const ID = 10;
let bookingsList=[{id:10}, {id:20}]

bookingsList.forEach(booking => booking.id === ID ? blacklist.push(booking) : newBookingList.push(booking))


console.log(newBookingList)
console.log(blacklist)
0 голосов
/ 11 октября 2018

Можно использовать forEach() и троичный оператор:

const bookingsList = [{id:'black'},{id:'new'}];
const blacklist = [], newBookingList = [], id='black';
bookingsList.forEach(booking => booking.id === id? blacklist.push(booking.id) : newBookingList.push(booking.id));

console.log(blacklist);
console.log(newBookingList);
0 голосов
/ 11 октября 2018

Вы можете использовать метод splice для извлечения и удаления отфильтрованного значения.

 var bookingList = [{id : 1, name : "A"}, {id: 2, name: "B"}];
 var sBookingList = bookingList.splice(bookingList.map(function(b){return b.name}).indexOf("A"), 1);
    console.log(sBookingList);
    console.log(bookingList);
0 голосов
/ 11 октября 2018

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

const array1 = [];
const array2 = [];
for (var i = 0; i < input.length; i++) {
    const value = input[i];
    ( testCondition(value) ? array1 : array2 ).push(value);
}
0 голосов
/ 11 октября 2018

Вы можете сделать это за одну итерацию, используя forLoop, например

const blacklist = [];
const newBookingList = [];
bookingsList.forEach(booking => {
     if(booking.id === id) {
         blacklist.push(booking)
     }
     else {
         newBookingList.push(booking)
     }
}
0 голосов
/ 11 октября 2018

Я думаю, вы можете использовать forEach для этого:

const newBookingList = [];
const blacklist = [];
bookingsList.forEach(function(booking) {
  if(booking.id === id){
      blacklist.push(booking)
  }
  if(booking.id !== id){
      newBookingList.push(booking)
  }
})

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

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