如何将对象与 Lodash 合并,但替换数组值?

时间:2021-02-17 17:28:11

标签: lodash

我正在尝试用来自具有数组的新对象的值替换旧对象的数组...我想当您看到示例并期望结果时会有意义:

https://jsfiddle.net/redlive/9coq7dmu/

const oldValues = {
    a: 1,
  b: [2, 21, 22, 23],
  c: {
    d: 3,
    e: 4,
    f: [5, 6, 7]
  }
};

const updatedValues = {
    b: [],
    c: {
    f: [8]
  }
}

const result = _.merge( oldValues, updatedValues );
console.log(result);

/* Desire result:

{
  a: 1,
  b: [],
  c: {
    d: 3,
    e: 4,
    f: [8]
  }
} 

*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

1 个答案:

答案 0 :(得分:2)

使用_.mergeWith(),如果第二个值是一个数组,则返回它。如果没有返回undefined,让merge处理:

const oldValues = {"a":1,"b":[2,21,22,23],"c":{"d":3,"e":4,"f":[5,6,7]}};
const updatedValues = {"b":[],"c":{"f":[8]}};

const result = _.mergeWith(oldValues, updatedValues, (a, b) => 
  _.isArray(b) ? b : undefined
);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

相关问题