2017-03-09 32 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); 

     });