如何使用Javascript将数组的值转换为每个条目中的不同键
How to convert an array's values into distinct keys within each entry with Javascript?
我有以下数据集。数组中的每个条目都有一个名为"Type"的键,共有三种类型。
var data = [
{date: "12/27/2012", Type: "http_200", Val: 190, Irrelevant: "Stringa"},
{date: "12/28/2012", Type: "http_200", Val: 10, Irrelevant: "Stringb"},
{date: "12/29/2012", Type: "http_404", Val: 100, Irrelevant: "Stringc"},
{date: "12/30/2012", Type: "http_302", Val: 90, Irrelevant: "Stringd"},
];
我希望每个类型都成为自己的键,其值与'Val'的值相同
Result = [
{date: "12/27/2012",Type: "http_200", Val: 190, http_404: 0, http_200: 190, http_302: 0},
{date: "12/28/2012",Type: "http_200", Val: 10, http_404: 0, http_200: 10, http_302: 0},
{date: "12/29/2012",Type: "http_404",Val: 100, http_404: 100, http_200: 0, http_302: 0},
{date: "12/30/2012",Type: "http_302",Val: 90, http_404: 0, http_200: 0, http_302: 90},
];
做这件事最有效的方法是什么?我将在一个更大的数据集上做这个。
还有,是否有可能在不知道所有类型的情况下做到这一点,以便我可以轻松地在任何给定的键上运行它。
我可以尝试下面的东西,但问题是,考虑到数据和类型的数量,对每个键和值都这样做是非常繁琐的
data.forEach(function (d) {
if(d.Type = 'http_200'){d.http_200=d.Val, d.http_404=0, http_302=0} else {d.http_200=d.0, d.http_404=0, http_302=0};
if(d.Type = 'http_404'){d.http_200=0, d.http_404=d.Val, http_302=0} else {d.http_200=d.0, d.http_404=0, http_302=0};
if(d.Type = 'http_302'){d.http_200=0, d.http_404=0, http_302=d.Val} else {d.http_200=d.0, d.http_404=0, http_302=0};
});
你需要遍历数组两次。首先提取所有类型,然后创建值。
var data = [
{date: "12/27/2012", Type: "http_200", Val: 190, Irrelevant: "Stringa"},
{date: "12/28/2012", Type: "http_200", Val: 10, Irrelevant: "Stringb"},
{date: "12/29/2012", Type: "http_404", Val: 100, Irrelevant: "Stringc"},
{date: "12/30/2012", Type: "http_302", Val: 90, Irrelevant: "Stringd"},
];
var types = [];
function getTypes(data){
for (var i = 0, endi = data.length; i<endi; ++i){
var obj = data[i]
if(types.indexOf(obj.Type)) types.push(obj.Type);
}
}
function addAllTypesToData(data, types){
for (var data_i = 0, data_endi = data.length; data_i<data_endi; ++data_i){
var obj = data[data_i];
for (var type_i = 0, type_endi = types.length; type_i<type_endi; ++type_i){
obj[types[type_i]] = (obj.Type === types[type_i]) ? obj.Val : 0;
}
}
}
getTypes(data);
addAllTypesToData(data, types);
相关文章:
- 如何在javascript上使用flak-babel进行翻译
- 在javascript中使用命名空间
- 操作员”;新的“;根据我想在几个JavaScript文件中使用的类,在JavaScript中使用
- 在JavaScript中使用对象作为属性键
- 为什么不'我们在javascript中使用函数参数的数据类型
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 如何在javascript中使用不止一个函数
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- 当null应该在javascript中使用而不是未定义时
- Javascript 变量使用 jquery 查找变量
- 避免在if condition-Javascript中使用函数
- 在javascript中使用split函数希望在页面加载时拆分url
- 在Javascript中使用全局变量作为缓存是很好的
- 在javascript中使用方括号表示法的嵌套对象
- 如何在javascript中使用嵌套函数作为生成器(使用“inner”yields)
- 如何分割由JavaScript中使用正则表达式的多个部分组成的字符串
- 在javascript中使用json数据导致问题
- 在javascript中使用小数
- 在 JavaScript 中使用重排隐藏元素,它与 CSS 隐藏属性有何不同