首页 > 解决方案 > 在条件下将密钥转换为对?

问题描述

我有一个通用对象和确定配对键的对象:

const obj = {
   key1: 1,
   key2: 2,
   key3: 3,
};

const pairs = {
  'key1:key3': 666,
};

在这种情况下,生成的对象将是:

const result = {
  'key1:key3': 666,
  key2: 2
};

如果源对象中存在对中的两个键,则对具有更高的优先级,然后采用与值配对,否则采用单个键/值。例如另一种情况:

const obj = {
   key1: 1,
   key2: 2,
   key4: 3,
};

const pairs = {
  'key1:key3': 666,
};

const result = {
   key1: 1,
   key2: 2,
   key4: 3,
};

// same as obj, because no key1 and key3 is present

我怎样才能用 lodash 实现这些逻辑?

标签: javascriptlodash

解决方案


此解决方案并不完整,但您可以扩展此逻辑来解决您的问题。

/** const obj = {
   key1: 1,
   key2: 2,
   key4: 3,
};

const pairs = {
  'key1:key3': 666,
};
**/

const obj = {
  key1: 1,
  key2: 2,
  key3: 3,
};

const pairs = {
  'key1:key3': 666,
};

const pairKeys = Object.keys(pairs);

pairKeys.forEach((key) => {
  const keys = key.split(':');
  const isAllKeysPresent = keys.every(k => {
    return !!obj[k]; // returns boolean
  });

  const objCopy = { ...obj
  };
  if (isAllKeysPresent) {
    keys.forEach(k => {
      delete objCopy[k];
    })

    console.log({ ...pairs,
      ...objCopy
    })
  } else {
    console.log(objCopy)
  }
})


推荐阅读