我有两个数组可以说
var termRateOptionsArr = [{
"term": 48,
"rate": 2.99,
"residualPercent": 0
}, {
"term": 60,
"rate": 1.99,
"residualPercent": 0
}, {
"term": 72,
"rate": 0.99,
"residualPercent": 0
}];
var cashDownOptionsArr = [{
"cashdown": "2000"
}, {
"cashdown": "4000"
}, {
"cashdown": "6000"
}];
我想使用以下代码将这两个数组组合成一个矩阵组合:
var cartesian = function() {
var combos = _.reduce(arguments, function(a, b) {
return _.flatten(_.map(a, function(x) {
return _.map(b, function(y) {
return x.concat([y]);
});
}), true);
}, [ [] ]);
return _.flatten(_.map(combos, function(item) {
return _.extend(item[0], item[1]);
}));
};
console.table( cartesian(termRateOptionsArr,cashDownOptionsArr));
我遇到问题我只得到最后一项数组值而不是数组中的每一项。我认为这与一些关闭问题有关,但不确定......任何帮助都表示赞赏..
答案 0 :(得分:0)
根据这篇文章:How can I add a key/value pair to a JavaScript object?,我认为你应该可以使用这样的语法:
termRateOptionsArr[i].cashdown = cashDownOptionsArr[i].cashdown;
答案 1 :(得分:0)
其中一个问题是_.extend()
会覆盖其第一个参数(“destination”)中的对象。所以:
return _.flatten(_.map(combos, function(item) {
return _.extend(item[0], item[1]);
}));
使用新合并的对象覆盖源cashDownOptionsArr
数组。
一个修复是克隆目标对象,如下所示:
return _.flatten(_.map(combos, function(item) {
var clone0 = _.clone(item[0]);
return _.extend(clone0, item[1]);
}));
plunker with underscore solution
然而,由于在没有下划线的情况下执行此操作非常简单且性能更高,我会将这两个矩阵组合起来:
var cartesian = function(a,b) {
var combos= [];
var i=0;
for (var x=0; x<a.length;x++)
for (var y=0; y<b.length;y++)
{
combos[i]={};
// Copy properties of a[x]
for (var indx in a[x]) {
combos[i][indx] = a[x][indx];
}
// Copy properties of b[y]
for (var indx in b[y]) {
combos[i][indx] = b[y][indx];
}
i++;
}
return combos;
};