如何将多维数组转换为对象中的arr

时间:2018-11-10 09:08:47

标签: javascript arrays object for-loop multidimensional-array

您能解释一下如何将该2d数组转换为array并在其中有对象的逻辑,这是输入:

const arr = [
["Tony", "a", "b"],
["Sara", "c", "z"]
           ];

如何将它们转换为:

obj = [
{
 name:"Tony", 
 first:"a", 
 second:"b"
},
{
 name:"Sara", 
 first:"c", 
 second:"z"
}
   ]

我们应该临时创建2个对象吗?把它们放在数组中 循环如何?我们可以只使用一次循环吗? 以及2d数组的长度与第一或第二个2d数组的长度不同,
我确实很想知道这种方法,如果您不介意的话,请解释一下, 我确实喜欢你们大家都不要使用ES6 :),所以我知道逻辑

6 个答案:

答案 0 :(得分:4)

使用Array.map()。在地图的回调中,使用array destructuring将值提取到变量中,而不是使用shorthand property names创建对象:

const arr = [["Tony", "a", "b"], ["Sara", "c", "z"]];

const result = arr.map(([name, first, second]) => ({
  name,
  first,
  second
}));

console.log(result);

如果您不想使用Array.map(),则可以使用for...of循环来构建一个:

const map = (arr, cb) => {
  const r = [];
  
  for(const item of arr) {
    r.push(cb(item));
  }
  
  return r;
};

const arr = [["Tony", "a", "b"], ["Sara", "c", "z"]];

const result = map(arr, ([name, first, second]) => ({
  name,
  first,
  second
}));

console.log(result);

答案 1 :(得分:3)

您可以将.map()用于某些数组解构:

const arr = [
  ["Tony", "a", "b"],
  ["Sara", "c", "z"]
];

const result = arr.map(([name, first, second]) => ({name, first, second}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者,您可以使用简单的for循环:

const arr = [
  ["Tony", "a", "b"],
  ["Sara", "c", "z"]
];

const result = [];

for(var i = 0; i < arr.length; i++) {
  result.push({
    name: arr[i][0],
    first: arr[i][1],
    second: arr[i][2]
  });
}

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:2)

var arr = [["Tony", "a", "b"], ["Sara", "c", "z"]];

function parseData(input){ 
    var output = [];
    for(var i = 0; i< input.length ; i++){
        output.push({name:input[i][0],first:input[i][1],second:input[i][2]})
    }
    return output;
}
console.log(parseData(arr));

编辑-解释

由于输入被构造为2D数组,内部数组的固定长度为3,外部数组的非负数(> = 0)。使用for循环遍历外部数组,使用索引号遍历内部数组,并将结果存储在output数组中。

JsFiddle演示-https://jsfiddle.net/53umf8rv/

答案 3 :(得分:1)

没有地图:

const arr = [
["Tony", "a", "b"],
["Sara", "c", "z"]
           ];

obj=[]; 
for(innerArr of arr)
{
obj.push({"name":innerArr[0],"first":innerArr[1],"second":innerArr[2]});
}

console.log(obj);

答案 4 :(得分:1)

无需使用高阶函数,就可以使用for of循环来实现:

const arr = [
  ["Tony", "a", "b"],
  ["Sara", "c", "z"]
];

let obj_arr = [];

for(inner_arr of arr) {
  obj_arr = [...obj_arr, {name: inner_arr[0], first: inner_arr[1], second: inner_arr[2]}];
}

console.log(obj_arr);

答案 5 :(得分:1)

您可以使用外部for ... of statement,它通过使用带有索引变量的经典for statement来迭代数组的项并迭代内部数组,该索引变量用于获取对应的键值作为好吧。

对于每个内部迭代,请为临时对象获取一个新属性并分配一个值。在内部迭代结束时,将临时对象推入结果集。

function convert(array, keys) {
    var result = [],
        items,
        i,
        temp;
    
    for (items of array) {
        temp = {};
        for (i = 0; i < items.length; i++) {
            temp[keys[i]] = items[i];
        }
        result.push(temp);
    }
    
    return result;
}

console.log(convert([["Tony", "a", "b"], ["Sara", "c", "z"]], ["name", "first", "second"]));