如何用另一个对象的匹配键值替换对象键

时间:2019-05-17 02:54:07

标签: javascript arrays 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'

9 个答案:

答案 0 :(得分:2)

您可以使用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)

答案 1 :(得分:2)

这是最有效的方法。 检查以上所有答案here的执行情况。

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)

答案 2 :(得分:1)

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);

答案 3 :(得分:1)

您可以按照以下步骤进行操作:

  • 使用blur = cv2.GaussianBlur(original, (5,5), 3) result = cv2.bitwise_and(blur, blur, mask=otsu)
  • 获取第一个对象的条目
  • 在条目数组上使用Object.entries()
  • 在地图中检查当前键是否存在于第二个对象上,然后返回键已更改的条目,否则返回相同的键。
  • 最后使用map()获取一个对象。

Object.fromEntries()

答案 4 :(得分:1)

您可以使用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)

答案 5 :(得分:1)

您可以使用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)

答案 6 :(得分:1)

您可以使用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);

希望这会有所帮助!

答案 7 :(得分:0)

您可以尝试使用代码

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

答案 8 :(得分:0)

一种非常简单的方法:

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]
  }
}