我确实有两个对象,其中包含像
var a = {bar:[1,2], foo:[7,9]}
var b = {bar:[2,2], foo:[3,1]}
我想得到令人失望的结果:
var c = {bar:[3,4], foo:[10,10]}
我已经有一个for
逻辑,例如:
for (let key in b) {
if (a[key]) {
a[key][0] += b[key][0];
a[key][1] += b[key][1];
}
else a[key] = b[key];
}
但是我想以一种破旧的方式表达这种逻辑。我该怎么办?
答案 0 :(得分:1)
您可以使用create函数来接收n
个对象,然后使用rest parameters将它们收集到一个数组中。现在,您可以将数组spread放入_.mergeWith()
中以合并对象,并在定制器函数中使用Array.map()
或lodash的_.map()
和{{3}对数组中的项求和}:
const { mergeWith, isArray, map, add } = _
const fn = (...rest) => _.mergeWith({}, ...rest, (o = [], s) =>
map(s, (n, i) => add(n, o[i]))
)
const a = {bar:[1,2], foo:[7,9]}
const b = {bar:[2,2], foo:[3,1]}
const c = {bar:[3,2], foo:[5,6]}
const d = {bar:[4,2], foo:[5,4]}
const result = fn(a, b, c, d)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
您还可以使用_.add()
创建一个函数,该函数将所有值合并到带有_.mergeAllWith()
的多维数组中,然后使用_.zipAll()
转置数组,并对每个数组求和:
const { rest, flow, mergeAllWith, isArray, head, mapValues, zipAll, map, sum } = _
const fn = rest(flow(
mergeAllWith((o, s) => [...isArray(head(o)) ? o : [o], s]), // combine to a multidimensional array
mapValues(flow(
zipAll,
map(sum)
)),
))
const a = {bar:[1,2], foo:[7,9]}
const b = {bar:[2,2], foo:[3,1]}
const c = {bar:[3,2], foo:[5,6]}
const d = {bar:[4,2], foo:[5,4]}
const result = fn(a, b, c, d)
console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
答案 1 :(得分:1)
您可以使用带有String placeToSaveFile = "C:/path/to/your/project/";
Files.copy(theSelectedFile.toPath(), new File(placeToSaveFile).toPath(), StandardCopyOption.REPLACE_EXISTING);
,Object.entries
和concat
的普通JavaScript来完成此操作:
reduce