gpt4 book ai didi

javascript - 下划线 map 对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:30:57 26 4
gpt4 key购买 nike

我整天都在为这个问题苦苦挣扎。

我有以下数组:

controller.array = [{
Equity: "0",
Bond: "97.42",
Cash: "67.98"
}, {
Equity: "5.32",
Bond: "13.12",
Cash: "8"
}, {
// ...
} /* ... */ ]

我想要做的是创建一个包含具有组合值的对象的单个数组,如下所示:

controller.newArray = [{
Type: "Equity",
Percentage: "5.32"
}, {
Type: "Bond",
Percentage: "110.54"
}, {
Type: "Cash",
Percentage: "75.98"
} /* ... */ ]

我试过像这样使用 _.each:

.map(function(item, value) {
var array = [];
_.each(item, function(value, item) {
array.push({
'Source': item,
'Percentage': value
})
})
return array;
})
.value()

然后发生的是它返回一个数组,其中包含多个数组,其中包含具有我的值的对象。现在我的问题是我似乎无法组合所有返回的数组。

有什么想法吗?请问?

最佳答案

您可以将对象数组转置为按公共(public)键分组的值数组。

然后您可以将值映射到结果对象。

transpose()sum() 函数是下划线混合,因此您可以将它们链接起来!

_.mixin({
transpose : function(array) {
return _.chain(array).map(_.keys).flatten().uniq().reduce(function(result, key) {
result[key] = _.pluck(array, key);
return result;
}, {}).value();
},
sum : function(values) {
return _.reduce(values, function(sum, value) {
return sum + (_.isNumber(value) ? value : parseFloat(value));
}, 0);
}
});

var array = [{
Equity: "0",
Bond: "97.42",
Cash: "67.98"
}, {
Equity: "5.32",
Bond: "13.12",
Cash: "8"
}];

var result = _.chain(array).transpose().map(function(value, key) {
return {
Type: key,
Percentage: _.sum(value).toFixed(2)
};
}).value();

console.log(JSON.stringify(result, null, 2));
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

关于javascript - 下划线 map 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com