如何使用 Lodash 合并对象,但替换数组值?

问题描述 投票:0回答:1

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

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>

lodash
1个回答
21
投票

使用

_.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>

© www.soinside.com 2019 - 2024. All rights reserved.