Javascript 对象添加到循环内的数组中时覆盖
我正在研究一种将数组转换为对象的算法。当最后一个变换对象被覆盖时,将覆盖阵列中的上一个对象 这是我的代码:Javascript 对象添加到循环内的数组中时覆盖,javascript,arrays,object,Javascript,Arrays,Object,我正在研究一种将数组转换为对象的算法。当最后一个变换对象被覆盖时,将覆盖阵列中的上一个对象 这是我的代码: let array = [ [ ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'] ], [ ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'm
let array = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
];
function transformEmployeeData(array) {
let obj = {};
for(let i in array) {
for(let j in array[i]) {
obj[array[i][j][0]] = array[i][j][1];
}
array.splice(i,1,obj);
}
return array;
}
let run = transformEmployeeData(array);
我希望将此结果作为输出:
[
{firstName: "Joe", lastName: "Blow", age: 42, role: "clerk"}
{firstName: "Mary", lastName: "Jenkins", age: 36, role: "manager"}
];
而不是得到这个
[
{firstName: "Mary", lastName: "Jenkins", age: 36, role: "manager"},
{firstName: "Mary", lastName: "Jenkins", age: 36, role: "manager"}
];
当我记录obj时,我得到了预期的结果。当我将它添加到数组中时,它只会覆盖前面的结果。基本上,你会反复使用同一个对象,并获取最后的值,因为它保留了引用 可以使用空对象为每个循环初始化obj 因此,您可以使用一个新数组,而无需改变原始数组 只是另一个提示,对于迭代数组,您最好使用索引并对其进行计数,而不是使用for。。。语法为: 变量数组=[ [ ['firstName','Joe'], ['lastName','Blow'], [‘年龄’,42], [‘角色’、‘职员’] ], [ ['firstName','Mary'], ['lastName','Jenkins'], [‘年龄’,36], [‘角色’、‘经理’] ] ]; 函数transformEmployeeDataarray{ 变量i,j,温度=[]; 对于i=0;i
function transformEmployeeData(array) {
let returnvalue = [];
for(let i in array) {
let obj = {};
for(let j in array[i]) {
obj[array[i][j][0]]=array[i][j][1];
}
returnvalue.push(obj);
}
return returnvalue;
}
希望这对您有所帮助,同时在迭代时,尽量避免操纵改变长度的交互数组,以避免意外结果,如“拼接、推送等”。请参见重复目标。您只需要将方法嵌套一级,因为您需要一个对象数组。返回一个新的转换数组是否比修改输入数组参数并导致副作用更好?永远不要假设破坏性变体是所需的变体。对,新数组更适合。