Из массива объектов извлеките выбранные объекты и создайте новый массив - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть массив таких объектов:

var myArray = [
  {"domain":"mysite.es","id":12,"selected":false},
  {"domain":"mysite.bg","id":51,"selected":false},
  {"domain":"mysite.uk","id":41,"selected":false},
  {"domain":"mysite.bg","id":36,"selected":false},
  {"domain":"mysite.pt","id":14,"selected":false},
  {"domain":"mysite.it","id":78,"selected":false},
  {"domain":"mysite.gr","id":71,"selected":false},
  {"domain":"mysite.dr","id":73,"selected":false}
]

Мне нужно создать три новых массива из myArray только с выбранными объектами.Например:

firstArrayFromMyArray будет содержать объекты с индексами 0,2 и 4, secondArrayFromMyArray будет содержать объекты с индексами 1 & 4 и thirdArrayFromMyArray будет содержать объекты с индексами 6 & 7

Следуя вышеприведенному примеру, вывод для firstArrayFromMyArray должен выглядеть примерно так:

firstArrayFromMyArray = [
  {"domain":"mysite.es","id":12,"selected":false},
  {"domain":"mysite.uk","id":41,"selected":false},
  {"domain":"mysite.pt","id":14,"selected":false}
]

Что было бы оптимальным способом сделатьэто?

Ответы [ 3 ]

1 голос
/ 26 сентября 2019

Вы можете взять объект с целями для каждого индекса и отправить требуемый объект в новый внешний индекс.

var array = [{ domain: "mysite.es", id: 12, selected: false }, { domain: "mysite.bg", id: 51, selected: false }, { domain: "mysite.uk", id: 41, selected: false }, { domain: "mysite.bg", id: 36, selected: false }, { domain: "mysite.pt", id: 14, selected: false }, { domain: "mysite.it", id: 78, selected: false }, { domain: "mysite.gr", id: 71, selected: false }, { domain: "mysite.dr", id: 73, selected: false }],
    targets = { 0: 0, 2: 0, 5: 0, 1: 1, 5: 1, 6: 2, 7: 2 },
    result = array.reduce((r, o, i) => {
        (r[targets[i]] = r[targets[i]] || []).push(o);
        return r;
    }, []);
    
console.log(result);
0 голосов
/ 26 сентября 2019

var myArray = [
  {"domain":"mysite.es","id":12,"selected":false},
  {"domain":"mysite.bg","id":51,"selected":false},
  {"domain":"mysite.uk","id":41,"selected":false},
  {"domain":"mysite.bg","id":36,"selected":false},
  {"domain":"mysite.pt","id":14,"selected":false},
  {"domain":"mysite.it","id":78,"selected":false},
  {"domain":"mysite.gr","id":71,"selected":false},
  {"domain":"mysite.dr","id":73,"selected":false}
];

function get3Arrays(myArray)
{
	let ary = [];
	ary.push([myArray[0], myArray[2], myArray[5]]);
	ary.push([myArray[1], myArray[4]]);
	ary.push([myArray[6], myArray[7]]);
	return ary;
}

let aryOfArrays = get3Arrays(myArray);

console.log('1st Array', aryOfArrays[0]);
console.log('2nd Array', aryOfArrays[1]);
console.log('3rd Array', aryOfArrays[2]);
0 голосов
/ 26 сентября 2019

Я хотел бы рекомендовать использовать reduce.

const {
  firstArrayFromMyArray,
  secondArrayFromMyArray,
  thirdArrayFromMyArray,
} = myArray.reduce((acc, ele, index) => {
  if (index === 0 || index === 2 || index === 5) {
    acc.firstArrayFromMyArray.push(ele);
  } else if (index === 1 || index === 4) {
    acc.secondArrayFromMyArray.push(ele);
  } else if (index === 6 || index === 7) {
    acc.thirdArrayFromMyArray.push(ele);
  }
  return acc;
}, {
  firstArrayFromMyArray: [],
  secondArrayFromMyArray: [],
  thirdArrayFromMyArray: [],
});
...