簡體   English   中英

映射數組中對象中的數組

[英]Mapping over arrays in objects in arrays

我有這樣的數據結構:

let foo = [{ "a": [1,2,3] }]

我想映射對象內部的數組,在這個數組中

// Approach 1:
foo.map(foo => foo.a.map(val => val + 1))

這返回[ [ 2,3,4 ] ]但刪除了外部對象(我認為非常有趣)。

// Approach 2:
foo.map(foo => {
    foo.a = foo.a.map(val => val + 1)
    return foo
})

這有效,但也會改變對象本身。

有沒有辦法做到這一點,返回正確的值,但不會更改作為參數給出的對象?

編輯:

我的用例包括在這個數組中有多個對象:

let bar = [
    { "a": [1,2,3] },
    { "a": [5,5,5] },
    { "a": [10,100,1000] },
]

所以直接解決內部的數組並沒有多大幫助。

您可以使用Object.assign()返回原始對象的副本,並添加已修改a數組。

 let bar = [ { "a": [1,2,3]}, { "a": [5,5,5] }, { "a": [10,100,1000] }, ] let result = bar.map(function(e) { return Object.assign({}, e, {a: eamap(a => a + 1)}) }) console.log(bar) console.log(result) 

您可以迭代對象的所有條目,並返回包含所有對象和遞增數組的新數組。

 let foo = [{ a: [1, 2, 3] }, { b: [7, 8, 9] }], result = foo.map(o => Object.assign({}, ...Object.entries(o).map(([k, v]) => ({ [k]: v.map(b => b + 1) })))); console.log(result); console.log(foo); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

我建議你在使用Object.assign()時要小心,因為如果它的第一個參數是一個空對象,它會破壞對foo對象的引用。 根據具體情況,這可能是您想要的,也可能不是。

如果你想保留參考,你可以簡單地做如下;

 var foo = [{ "a": [1,2,3]}], bar = foo.map(o => (oa = oamap(val => val + 1),o)); console.log(bar); foo[0].x = "whatever"; console.log(foo); console.log(bar); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM