[英]How to replace object key with matching key value from another object
我有一個對象:
{pm: 'val 1', dm: 'val 2', cm: 'val 3'}
我想遍歷這個並檢查另一個對象中是否存在任何鍵,
如果它們然后用來自另一個對象的匹配鍵值替換鍵。
{pm: 'price', dm: 'discount', cm: 'cost'}
預期的輸出將是:
{price: 'val 1', discount: 'val 2', cost: 'val 3'
您可以使用reduce
,檢查另一個對象中是否存在鍵,然后將anotherObj
的值添加為最終對象中的鍵
let obj = {pm: 'val 1', dm: 'val 2', cm: 'val 3', 'xy':'val 4'} let anotherObj = {pm: 'price', dm: 'discount', cm: 'cost'} let final = Object.entries(obj).reduce((op, [key,value]) => { let newKey = anotherObj[key] op[newKey || key ] = value return op },{}) console.log(final)
這是最有效的方法。 在此處檢查上述所有答案的表現。
var obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3', mm: 'val 4'}; var obj2 = {pm: 'price', dm: 'discount', cm: 'cost'}; var output = {}; for(var key in obj1){ if(obj2[key]){ output[obj2[key]] = obj1[key]; } else { output[key] = obj1[key]; } }; console.log(output)
將reduce
與Object.entries
一起使用:
const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3'}; const obj2 = {pm: 'price', dm: 'discount', cm: 'cost'}; const res = Object.entries(obj1).reduce((acc, [k, v]) => ({ ...acc, [obj2[k] || k]: v }), {}); console.log(res);
您可以通過以下步驟執行此操作:
Object.entries()
獲取第一個對象的條目map()
。Object.fromEntries()
來獲取一個對象。 const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3'} const obj2 = {pm: 'price', dm: 'discount', cm: 'cost'} const res = Object.fromEntries( Object.entries(obj1) .map(([k,v]) => [(obj2[k] || k), v]) ) console.log(res)
您可以使用Object.entries
將鍵對象轉換為數組,並使用reduce
循環遍歷數組
var val = {"pm":"val 1","dm":"val 2","cm":"val 3"}; var key = {"pm":"price","dm":"discount","cm":"cost"}; var result = Object.entries(key).reduce((c, [v, k]) => Object.assign(c, {[k]: val[v] || null}), {}); console.log(result)
您可以使用Object.keys和Array.reduce以如下簡潔的方式實現此目的:
let vals = {pm: 'val 1', dm: 'val 2', cm: 'val 3'} let keys = {pm: 'price', dm: 'discount', cm: 'cost'} let result = Object.keys(keys).reduce((r,k) => (r[keys[k]] = vals[k]) && r, {}) console.log(result)
您可以使用 obj[key] 語法訪問和定義鍵。 請參閱下面的代碼如何循環遍歷obj2
,如果匹配,它將使用obj2[key]
的值作為鍵 ( res[obj2[key]]
) 在 res 上創建新節點。 我添加了一個額外的鍵mm
以便您可以看到當它不匹配時會發生什么。
const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3', mm: 'val 4'}; const obj2 = {pm: 'price', dm: 'discount', cm: 'cost'}; const res = {}; for(let key in obj1){ if(obj2[key]){ res[obj2[key]] = obj1[key]; } else { res[key] = obj1[key]; } }; console.log(res);
希望這可以幫助!
你可以試試代碼
const obj1 = {pm: 'val 1', dm: 'val 2', cm: 'val 3'},
obj2 = {pm: 'price', dm: 'discount', cm: 'cost'},
obj = {};
Object.keys(obj2).forEach( key2 => {
Object.keys(obj1).forEach( key1 => {
if (key2 === key1) {
obj[obj2[key2]] = obj1[key1]
}
});
});
console.log(obj)
一個非常直接的方法:
let obj = {pm: 'val 1', dm: 'val 2', cm: 'val 3'};
let otherObj = { dm: 'val 9'}
for(let key in obj){
if(otherObj[key] != null) {
obj[key] = otherObj[key]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.