有什么方法可以使数组的每个索引与数组中的其他索引匹配,但不与自身匹配

Is there any way to make match each index of array with other within array but not with itself

这是我的初始数组

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} 这将是错误的我试图实现的是比较每个索引数组而不是它本身我基本上合并到一个不比较它的对象中。接下来将用于排序。 谢谢

什么。我试试

what i try

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);
      }
    }

如果不担心支持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);