代码之家  ›  专栏  ›  技术社区  ›  Radex

如何根据条件在第一个位置创建新的数组位置元素?

  •  0
  • Radex  · 技术社区  · 6 年前

    我有一个数组 data ,我需要创建一个 新数组 ,其中元素匹配变量 toBeFirst 是第一个。

    请注意,我不能触摸原始阵列 数据

    const toBeFirst = 'b'
    const data = [{name: 'a'},{name: 'b'},{name: 'e'}, {name: 'x'}]
    
    // final result
    const data = [{name: 'b'},{name: 'a'},{name: 'e'}, {name: 'x'}
    

    知道如何使用最新的JS吗?是否可以使用reduce?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jonas Wilms    6 年前

    只需附加元素,如果它的特殊元素是:

    const result = data.reduce((arr, el) => el.name === toBeFirst ? [el].concat(arr) : arr.concat([el]), []);
    

    但是改变数组可能是eaiser:

    data.unshift(data.splice(data.findIndex(el => el.name === toBeFirst), 1)[0]);
    
        2
  •  1
  •   KooiInc    6 年前

    如果你提供你的试验代码的话会很好。无论如何,您可以使用双重过滤。回答第二个问题:是的,您可以使用 reduce ,请参见片段。

    const toBeFirst = 'b'
    const data = [{name: 'a'},{name: 'b'},{name: 'e'}, {name: 'x'}];
    const dataFirstB = data.filter(v => v.name === toBeFirst)
      .concat(data.filter(v => v.name !== toBeFirst));
    console.log(dataFirstB);
    // using a reducer
    const dataReduced = data.reduce( (a, v) => 
      v.name !== toBeFirst ? [...a, v] : a,
      data.filter(v => v.name === toBeFirst));
    console.log(dataReduced);