簡體   English   中英

如何用來自另一個對象的匹配鍵值替換對象鍵

[英]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)

reduceObject.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.keysArray.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)

這是一個演示https://codepen.io/phuongnm153/pen/PvmeEN

一個非常直接的方法:

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.

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