您能解释一下如何将该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 :),所以我知道逻辑
答案 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"]));