通过键和交换值搜索两个对象

时间:2019-10-09 16:15:02

标签: javascript arrays dictionary ecmascript-5

我想从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,其值类似于为用户显示DisplayID的名称。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

objC = objB.keys().reduce(result, key => {
    result[objA[key]] = objC[key];
    return result;
});

答案 1 :(得分: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
    )