отобразить весь массив после перемещения его значений в другой массив - PullRequest
2 голосов
/ 03 августа 2020

У меня есть массив, содержащий объекты, где в некоторых объектах есть ключ rpId. Цель состоит в том, чтобы отделить / переместить объекты, которые возвращают undefined, в отдельный массив и удалить их из первого массива.

например: results = [{id: 1}, {id: 2, rpId: 1076}, {id: 3}, {id: 4, rpId: 303}];

target: results = [{id: 2, rpId: 1076}, {id: 4, rpId: 303}] и stations = [{id: 1}, {id: 3}]

Мой текущий подход можно увидеть ниже. Как видно, я ошибаюсь array1, потому что он содержит объект с rpId, плюс array2 возвращает ключи объекта, и я хотел бы прочитать весь объект, а не только «undefined» ключа.

const array1 = [{id: 1}, {id: 2, rpId: 1076}, {id: 3}, {id: 4, rpId: 303}];
const array2 = [];

const mapping = array1.map((e) => e.rpId);
console.log("mapping",mapping);

mapping.forEach(function(elem, index){
    elem === undefined ? array2.push(elem) && array1.splice(index, elem === undefined) && console.log(elem): console.log("defined", elem);
}),

console.log("1", array1); // [{ id: 2, rpId: 1076 }, { id: 3 }]
console.log("2", array2); // [undefined, undefined]

Ответы [ 3 ]

2 голосов
/ 03 августа 2020

Вы также можете использовать фильтр:

let results = [
    { id: 1 },
    { id: 2, rpId: 1076 },
    { id: 3 },
    { id: 4, rpId: 303 },
  ];

  const stations = results.filter((c) => !c.rpId);

  results = results.filter((c) => c.rpId);

  console.log("stations", stations);
  console.log("results", results);
2 голосов
/ 03 августа 2020

Просто проверьте, не определено ли свойство rpId в каждом элементе.

const array1 = [{id: 1}, {id: 2, rpId: 1076}, {id: 3}, {id: 4, rpId: 303}];
const array2 = [];

array1.forEach(function(elem, index){
    if(elem.rpId === undefined) 
      array2.push(elem) && array1.splice(index, 1)
});
console.log(array1);
console.log(array2);

Также можно использовать элементы Array#filter или pu sh в двух отдельных массивах в зависимости от условия для лучшей производительности.

const array1 = [{id: 1}, {id: 2, rpId: 1076}, {id: 3}, {id: 4, rpId: 303}];
const yes = [], no = [];
array1.forEach(elem=>(elem.rpId!==undefined?yes:no).push(elem));
console.log(yes);
console.log(no);
0 голосов
/ 03 августа 2020
const GiveItACreativeName = (arr) => {
  const result = []
  const stations = []
  arr.forEach((el) => {
    if('rpId' in el) result.push(el);
    else stations.push(el);
  });
  return {result, stations}
}
console.log(
  GiveItACreativeName([{id: 1}, {id: 2, rpId: 1076}, {id: 3}, {id: 4, rpId: 303}])
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...