2017-03-09 31 views
1

我试图转换对象列表中给定键的所有元素。具体更改是将具有相同值的通用object转换为Long对象。转换对象数组中的单个元素

输入:

[obj1, obj2, obj3, ...] 

,每个对象的样子:

{ 
    key1: value1, // value1 is an object 
    key2: value2 
} 

所以这里的目标是获得一个非常相似的阵列,但如果key1从刚刚object转化为long对象在我的例子中增加了一个。

输出:

[obj1, obj2, obj3] 

其中每个对象是:

{ 
    key1: value1, // value1 is now a Long object 
    key2: value2 
} 

我试图与阵列上的映射,然后在对象的条目的扩展,但没有成功。

任何帮助将不胜感激。

+1

您尝试使用的代码应该是问题的一部分。 – Pointy

+0

应该是一张_very_简单的地图。你尝试了什么? –

+0

请在代码旁边添加一些真正的例子,并试试。 –

回答

0

感谢所有的答案家伙。

我结束了以下内容:

鉴于输入

[ 
    { 
     key1: value1, // value1 is an object 
     key2: value2 
    }, 

    { 
     key1: value1, // value1 is also an object 
     key2: value2 
    } 
] 

解决方案: 我结束了,

const testvar = [obj1, obj2, obj3].map((obj) => { 
    return { 
     ...obj, 
     key1: new Long.fromValue(obj.key1) 
    } 
    }); 

    console.log(testvar); 

这给输出

[ 
    { 
     key1: value1, // value1 is now a Long object 
     key2: value2 
    }, 

    { 
     key1: value1, // value1 is also now a Long object 
     key2: value2 
    } 
] 
1

除非你想创建一个新的数组,否则你并不需要在这里映射。简单的循环就足够了,只需更新key1或每个对象:

[obj1, obj2, obj3].forEach(obj => { 
    obj.key1 = obj.key1 + 1 
}) 
0

由于阵列持有物体 - 任何修改对象反映被传递的实际输入。您需要复制对象并执行逻辑。

你的逻辑,

var input = [obj1, obj2, obj3]; 
var output = input.map(function(obj){ 
    obj.key1 = obj.key1 + 1; 
    return obj; 
}); 

console.log(input[0]===output[0]); //true 

解决方案:

var output = input.map(function(obj){ 
    var _objCopy = Object.assign({}, obj); 
    _objCopy.key1 = _objCopy.key1 + 1; 
    return _objCopy; 
}); 

console.log(input[0]===output[0]); //false 
0

怎么样的任何对象ES6的方式动态地第一个关键

const myObject0 = { 
      'foo1': { name: 'myNam1' }, 
      'foo2': { name: 'myNam2' } 
     }; 

     const myObject1 = { 
      'yo': { name: 'myNam1' }, 
      'boh': { name: 'myNam2' } 
     }; 


     [myObject0, myObject1].forEach(obj => { 
      let getFirstKey = Object.keys(obj)[0]; 
      getFirstKey = getFirstKey + 1; 
      console.log(getFirstKey); 

     });