2017-10-20 136 views
0

將兩個多個數組映射到一個鍵構建一個最佳解決方案是什麼? 我有1個陣列誰擁有像通過鍵構建JS數組 - 尋找最佳解決方案

var users = [{id:5, name:'Alex'}, {id:17, name:'Tom'}, {id:11, name:'John'}]; 

他們的個人資料數據我也有車的另一個​​數組鍵USER_ID要確定哪臺機器屬於哪個用戶的用戶。

var cars = [{id:333, name:'Nissan', user_id:11}, {id:444, name:'Toyota', user_id:17}, {id:555, name:'BMW', user_id:999}]; 

所以我們可以看到湯姆有豐田和約翰有日產。

所以結果應該是 一個新的陣列映射結果

[{ 
"profile": { 
    "id": 17, 
    "name": "Tom" 
}, 
"car": { 
    "id": 444, 
    "name": "Toyota", 
    "user_id": 17 
} 
}, { 
"profile": { 
    "id": 11, 
    "name": "John" 
}, 
"car": { 
    "id": 333, 
    "name": "Nissan", 
    "user_id": 11 
} 

}]

我的解決辦法是使用的forEach拋用戶和子的forEach扔車和有比較user.id與car.user_id

https://jsfiddle.net/r7qwke1f/37/

+0

好,你有一個解決方案。所以有什麼問題? –

+0

我想找到最佳解決方案。我的解決方案看起來老派,我想:) – maxxdev

回答

2

你可以用C使用雙循環的辦法,而不是一個嵌套循環方式首先將哈希表中的所有用戶列入anbd,然後遍歷所有汽車,如果用戶可用,則創建一個新的結果集。

var users = [{ id: 5, name: 'Alex' }, { id: 17, name: 'Tom' }, { id: 11, name: 'John' }], 
 
    cars = [{ id: 333, name: 'Nissan', user_id: 11 }, { id: 444, name: 'Toyota', user_id: 17 }, { id: 555, name: 'BMW', user_id: 999 }], 
 
    hash = {}, 
 
    result = []; 
 

 
users.forEach(function (user) { 
 
    hash[user.id] = user; 
 
}); 
 

 
cars.forEach(function (car) { 
 
    if (hash[car.user_id]) { 
 
     result.push({ profile: hash[car.user_id], car: car }); 
 
    } 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

另一種解決方案

const mappedUsersCars = users.map((user) => ({ 
    profile: user, 
    car: cars.filter((car) => car.user_id === user.id)[0] 
})) 
0

您可以使用reduce()find()方法來獲得期望的結果。

var users = [{id:5, name:'Alex'}, {id:17, name:'Tom'}, {id:11, name:'John'}]; 
 
var cars = [{id:333, name:'Nissan', user_id:11}, {id:444, name:'Toyota', user_id:17}, {id:555, name:'BMW', user_id:999}]; 
 

 
var r = users.reduce(function(r, e) { 
 
    var car = cars.find(a => a.user_id == e.id); 
 
    if(car) r.push({profile: e, car: car}); 
 
    return r; 
 
}, []) 
 

 
console.log(r)

0

基本上有你想使用兩種方法。你想給用戶map到車,所以你要爲find你是指用戶一輛車

const result = users.map((user) => { 
    const car = cars.find(car => car.user_id === user.id); 
    return { 
     profile: user, 
     car, 
    } 
})