转换数组/对象:如何在for循环中创建动态命名对象?

时间:2017-02-16 04:31:24

标签: javascript

试图操纵这个:

input = [ 
[ ['a','b'], ['c','d'], ['e','f'] ], 
[ ['g','h'], ['i','j'],  ]
]

output = [
    {a: 'b', c: 'd', e: 'f'},
    {g: 'h', i: 'j'},
]

这是我到目前为止所拥有的:

function transform(array) {
  result = [];
  for (var i=0; i<array.length; i++){
    for (var j=0; j<array[i].length; j++){

    // How can I create an object here? 

    object.array[i][j][0] = array[i][j][1];
    }
  }
return result; 
}

我正在尝试解决这个问题作为编码挑战,所以我不一定想要答案,但我不确定如何继续。由于内部有一对字符串的数组的数量不一致(例如,输入数组中的第一组数组有3组,第二组有2组,我认为我需要在每个循环中动态创建对象我可以在最后添加到结果数组。我该怎么做?

我认为我不应该使用任何类型的更高级/更高级的功能。目标是建立我对基础知识的熟悉程度。

4 个答案:

答案 0 :(得分:1)

您可以使用 reduce 来处理外部和内部数组,例如

var input = [
             [['a','b'], ['c','d'],['e','f'] ],
             [['g','h'], ['i','j'],]
            ];

// For each outer array
var result = input.reduce(function(acc, a){

  // Create an object from the inner arrays
  acc.push(a.reduce(function(acc, a) {
    acc[a[0]] = a[1];
    return acc;
  },{}));
  return acc;
}, []);

console.log('With reduce\n');
console.log(result);

// Same algorithm using for loops:
var result2 = [];

// For each outer array
for (var i=0, iLen=input.length; i<iLen; i++) {
  var acc = {};
  var a = input[i];

  // Loop over the inner arrays to build an object, 
  // then push into result array
  for (var j=0, jLen=a.length; j<jLen; j++) {
    var b = a[j]
    acc[b[0]] = b[1];
  }
  result2.push(acc);
}
console.log('\nWith loops')
console.log(result2);

答案 1 :(得分:0)

Input.reduce((memo,num) => {
    memo[num[0]]=num[1];
    return memo;
},{})

答案 2 :(得分:0)

input = [ 
[ ['a','b'], ['c','d'], ['e','f'] ], 
[ ['g','h'], ['i','j'],  ]
]

var output = [ input[0].reduce((memo,num) => { memo[num[0]]=num[1];return memo;},{})]

的console.log(JSON.stringify(输出))

[{ “一个”: “B”, “C”: “d”, “E”: “F”}]

答案 3 :(得分:0)

您可以使用嵌套的for..of循环来迭代每个内部数组,创建对象,将属性设置为索引0处的元素,将值设置为索引1处的元素,将嵌套for..of完成时将对象推送到数组环

let input = [
  [
    ['a', 'b'],
    ['c', 'd'],
    ['e', 'f']
  ],
  [
    ['g', 'h'],
    ['i', 'j']
  ]
];

let output = [];

for (let arr of input) {
  let o = {};
  for (let [key, value] of arr) {
    o[key] = value;
  }
  output.push(o);
}

console.log(output);