Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线映射对象_Javascript_Arrays_Object_Underscore.js - Fatal编程技术网

Javascript 下划线映射对象

Javascript 下划线映射对象,javascript,arrays,object,underscore.js,Javascript,Arrays,Object,Underscore.js,我一整天都在与这个问题作斗争 我得到了以下数组: controller.array = [{ Equity: "0", Bond: "97.42", Cash: "67.98" }, { Equity: "5.32", Bond: "13.12", Cash: "8" }, { // ... } /* ... */ ] 我要做的是创建一个数组,其中包含具有组合值的对象,如下所示: controller.newArray = [{ Type: "Equity",

我一整天都在与这个问题作斗争

我得到了以下数组:

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"
} /* ... */ ]
我尝试过使用
。每个
如下:

.map(function(item, value) {
    var array = [];
    _.each(item, function(value, item) {
      array.push({
        'Source': item,
        'Percentage': value
      })
    })
    return array;
  })
  .value()
然后,它返回一个数组,其中包含多个数组,其中包含具有“我的值”的对象。现在我的问题是,我似乎无法组合所有返回的数组


有什么想法吗?请?

如果您需要对每种类型进行求和,则应执行以下操作:

keys = {Equity: 0, Bond: 0, Cash: 0}
//newArray is the array from your question
newArray.forEach(function(obj) { 
   keys[obj.Type] +=  obj.Percentage})

可以将对象数组转换为按其公共键分组的值数组

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

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

混合({
转置:函数(数组){
return 0.chain(array).map(0.keys).flatte().uniq().reduce(函数(结果,键){
结果[键]=389;.pulk(数组,键);
返回结果;
},{}.value();
},
总和:函数(值){
返回u.reduce(值,函数(和,值){
返回和+(?.isNumber(value)?值:parseFloat(value));
}, 0);
}
});
变量数组=[{
权益:“0”,
债券:“97.42”,
现金:“67.98”
}, {
衡平法:“5.32”,
债券:“13.12”,
现金:“8”
}];
var result=\ u0.chain(数组).transpose().map(函数(值,键){
返回{
类型:键,
百分比:总和(值).toFixed(2)
};
}).value();
log(JSON.stringify(result,null,2))
.as控制台包装{top:0;最大高度:100%!重要;}

一种方法是,仅使用JavaScript可以使用
map
reduce
函数:

var数据=[{股权:“0”,债券:“97.42”,现金:“67.98”},
{股本:“5.32”,债券:“13.12”,现金:“8”};
var sumMap=数据减少(功能(acc,项目){
Object.keys(item.forEach)函数(itemKey){
if(acc[itemKey]==未定义){
acc[itemKey]=0;
}
acc[itemKey]+=parseFloat(item[itemKey]);
});
返回acc;
}, {});
var result=Object.keys(sumMap).map(函数(itemKey){
返回{
“类型”:itemKey,
“百分比”:“+sumMap[itemKey]
};
});

log(JSON.stringify(result,null,2))
您能否提供最小、完整且可验证的示例()。使用可运行的代码片段。我相信他的问题是非常清楚的@ppasler-他不是在问题上寻求帮助,而是在如何解决问题上寻求更多帮助。他想将第一个数组(具有
权益
债券
现金
属性的多个对象)转换为第二个数组。@JamesMonger我不清楚,如果提供运行示例,我总是喜欢它。没有其他人需要让它成为一个运行的示例。这是一个很好的普通解决方案,但是您可能希望使用parseFloat,这里有一个(首先打开控制台进行测试)。更正答案,添加一个运行片段,我将向上投票。谢谢!:)哈哈,我不知道为什么我要使用
parseInt
,很好的捕捉!)