Есть ли способ сделать соответствие каждого индекса массива с другим в массиве, но не с самим собой - PullRequest
0 голосов
/ 28 марта 2020

Вот мой начальный массив

const a = [A,B,C,D];

Я пытаюсь достичь такого результата, как

const finalarray = [
{key1 : A , key2 : B},{key1 : A , key2 : C},{key1 : A , key2 : D},
{key1 : B , key2 : A},{key1 : B , key2 : C},{key1 : B , key2 : D},
{key1 : C , key2 : A},{key1 : C , key2 : B},{key1 : C , key2 : D},
{key1 : D , key2 : A},{key1 : D , key2 : B},{key1 : D , key2 : C}]

, который вы можете видеть в каждом объекте конечного массива, который не сравнивается с тот же индекс, что и {key1: A, key2: A}, я буду пытаться добиться того, чтобы сравнивать каждый индекс массива, но не самого себя. Я просто объединяю объект, не сравнивая его. это будет использоваться далее для сортировки. Спасибо

что. я пытаюсь

что я пытаюсь

render() {
    let arraytoRender = null;
    let newarr = [];
    if (this.state.array) {
      let arraytoRender1 = [];
      this.state.array.map(p => {
        arraytoRender1.push(p.nom);
        newarr.push(p.nom);
      });
      arraytoRender = arraytoRender1.join();
    }
    let i;

    for (i = 0; i < newarr.length; i++) {
      if (newarr[i] !== newarr[i]) {
        console.log(newarr);
      }
    }

1 Ответ

0 голосов
/ 28 марта 2020

Если вы не беспокоитесь о поддержке IE, то вы можете сопоставить исходный массив с новым массивом, игнорируя повторяющийся элемент каждый раз при выполнении перестановок и в конце выравнивая массив.

const a = ['A', 'B', 'C', 'D'];

const output = a.map((key1, index, array) => {
  let otherElements = array.filter((x, i) => i != index);
  
  return otherElements.map(key2 => ({ key1: key1, key2: key2 }));
}).flat();

console.log(output);

Или вы можете просто сделать перестановки, а затем удалить те, которых там не должно быть.

const a = ['A', 'B', 'C', 'D'];

const output = a.map((key1, index, array) => {
  return array.map(key2 => ({ key1: key1, key2: key2 }));
}).flat().filter(x => x.key1 != x.key2);

console.log(output);
...