Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象添加到循环内的数组中时覆盖_Javascript_Arrays_Object - Fatal编程技术网

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;
}

希望这对您有所帮助,同时在迭代时,尽量避免操纵改变长度的交互数组,以避免意外结果,如“拼接、推送等”。

请参见重复目标。您只需要将方法嵌套一级,因为您需要一个对象数组。返回一个新的转换数组是否比修改输入数组参数并导致副作用更好?永远不要假设破坏性变体是所需的变体。对,新数组更适合。