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

在对象中每隔两个键重新排列一次

  •  0
  • Remi  · 技术社区  · 7 年前

    如何操作此对象以重新排列值。

    let obj = [
      {foo: 10, bar: 20},
      ["apple"],
      {foo: 30, bar: 40},
      ["pear"],
      {foo: 50, bar: 60},
      ["orange"]
    ]
    
    // The output should be: 
    // { "apple": { foo: 10, bar: 20 }, "pear": {...}, "orange": {...} }
    

    我已经尝试了这里提供的解决方案: loop and combine every two items

    但这并不能输出所需的输出。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Nikhil Aggarwal    7 年前

    使用 for loop

    let obj = [{foo: 10, bar: 20},["apple"],{foo: 30, bar: 40},["pear"],{foo: 50, bar: 60},["orange"]];
    
    var result = {};
    for(let i = 0; i < obj.length; i+= 2) {
      result[obj[i+1][0]] = obj[i];
    }
    console.log(result);
        2
  •  2
  •   void    7 年前

    .reduce 将此数组缩减为一个对象。见下面的逻辑。

    let obj = [{foo: 10, bar: 20},["apple"],{foo: 30, bar: 40},["pear"],{foo: 50, bar: 60},["orange"]];
    
    const arr = obj.reduce((a, el, i, arr) => {
      if(el instanceof Array){
        a[el[0]] = arr[i-1];
      }
      return a;
    }, {});
    
    console.log(arr);
        3
  •  1
  •   Faly    7 年前

    var obj = [
      {foo: 10, bar: 20},
      ["apple"],
      {foo: 30, bar: 40},
      ["pear"],
      {foo: 50, bar: 60},
      ["orange"]
    ];
    
    var result = obj.reduce((m, o, i) => (Array.isArray(o) && (m[o[0]] = obj[i - 1]), m), {});
    
    console.log(result);