按键和交换值搜索两个对象

问题描述 投票:-1回答:2

我想从objectA值替换objectB键。在该交换之前,每个对象中的objectA和ObjectB键都应匹配。然后在objectC中返回数据。

我看到了这个线程,但是我只想在交换键和值之前匹配键。Swap key with value JSON

喜欢这样

 var objA ={100:'new',200:'in progress',300:'done',500:'exception',225:'critical'};

 var objB ={100:12,200:5,300:50};

objectA和objectB具有相同的密钥。

objectA键是statusID,其值类似于显示用户的statusID名称。

objectB键是statusID,而值是statusID计数。因此此计数值是样本。

所以首先,我希望对象A和对象B的键匹配。这次,100,200,300是相同的键。

并且如果它们匹配,则匹配的objectA键的值替换objectB键。就像键100匹配,objectB键100应该变成“ new”。然后最后,objectC结果应该是这样的。

var objC ={'new':12,'in progress':5,'done':50};

任何建议都欢迎。感谢您的阅读。

javascript arrays dictionary ecmascript-5
2个回答
0
投票

哎呀,我不知道你在做什么-

const heck = (a = {}, b = {}) =>
  Object
    .entries(a)                   // using all entries from either object ...
    .reduce                       // reduce each ...
      ( (r, [ k, v ]) =>          // result, r, and key/value pair
          b[k] === undefined      // if key does not exist in other object
            ? r                   // continue with current result
            : { ...r, [v]: b[k] } // otherwise extend result with new key/value
      , {}                        // initial result
      )

const objA =
  {100:'new', 200:'in progress', 300:'done', 500:'exception', 225:'critical'}

const objB =
  {100:12, 200:5, 300:50}

console.log(heck(objA, objB))

// { "new": 12
// , "in progress": 5
// , "done": 50
// }

这是另一种可能更容易理解的书写方式。不利的一面是它做了一些不必要的迭代-

const heck = (a = {}, b = {}) =>
  Object.fromEntries                     // create new object from ...
    ( Object
        .keys(a)                         // all keys of either object
        .filter(k => b[k] !== undefined) // filter out non-matches in other
        .map(k => [ a[k], b[k] ])        // new [key, value] pair
    )

0
投票

您应该认为这是创建一个将其他两个对象的数据组合在一起的新对象。您可以通过在reduce()中的键数组上调用objB来执行所需的操作:

objC = objB.keys().reduce(result, key => {
    result[objA[key]] = objC[key];
    return result;
});
© www.soinside.com 2019 - 2024. All rights reserved.