如何将.reduce函数生成的数组操作为单独的键/值对?(JavaScript)
How to manipulate an array generated from .reduce function into separate key/value pairs? (JavaScript)
我正在努力解决我遇到的一个问题。reduce;
目前,我正在迭代一个数组来计算重复的数量,如下所示;
var data = ['141:150.5', '141:150.5', '141:150.5', '224:297.5','83:351.5','278:434.5','332:182', '332:182','263:135','256:155','256:155','105:65']
var reducer = function(tally, vote) {
if(!tally[vote]){
tally[vote] = 1
} else {
tally[vote] = tally[vote] + 1;
}
return tally;
}
var result = data.reduce(reducer, {});
console.log(result)
我想做的是将该数组中每个项的输出拆分为一个具有3个键/值对的对象。
因此,从上面("141:150.5": 3)
的输出中获得第一个结果,我想生成以下内容;
{
value1: 141,
value2: 150.5,
count: 3
},
等等。
然而,由于上面的函数没有输出数组长度,这意味着我无法通过result
进行迭代来开始构建所需的对象。
我在这里有点迷路了——任何帮助/建议都将不胜感激!
如前所述,您只需要拆分key
值并进行相应的处理。
此外,我还利用空闲时间更新了您的reduce函数。
var data = ['141:150.5', '141:150.5', '141:150.5', '224:297.5', '83:351.5', '278:434.5', '332:182', '332:182', '263:135', '256:155', '256:155', '105:65']
var reducer = function(tally, vote) {
tally[vote] = (tally[vote] || 0) + 1;
return tally;
}
var result = data.reduce(reducer, {});
var output = [];
for(var k in result){
var _t = k.split(":");
output.push({
value1: _t[0],
value2: _t[1],
count: result[k]
});
}
console.log(output)
你也可以更新你的reduce函数,直接给出输出,比如:
var data = ['141:150.5', '141:150.5', '141:150.5', '224:297.5', '83:351.5', '278:434.5', '332:182', '332:182', '263:135', '256:155', '256:155', '105:65']
var count = 1;
var reducer = function(p, c, i, a) {
if (p && p !== c) {
var _t = p.split(":");
result.push({
value1: _t[0],
value2: _t[1],
count: count
});
count = 1;
if (i === a.length - 1) {
_t = c.split(":");
result.push({
value1: _t[0],
value2: _t[1],
count: count
});
}
} else {
count++;
}
return c
}
var result = [];
data.sort().reduce(reducer);
console.log(result)
您可以简单地使用for在循环中迭代对象,并使用.split(':')
:通过:
分割密钥
var data = ['141:150.5', '141:150.5', '141:150.5', '224:297.5', '83:351.5', '278:434.5', '332:182', '332:182', '263:135', '256:155', '256:155', '105:65']
var reducer = function(tally, vote) {
if (!tally[vote]) {
tally[vote] = 1
} else {
tally[vote] = tally[vote] + 1;
}
return tally;
}
var result = data.reduce(reducer, {});
for (const key in result) {
const value = key.split(':')
result[key] = {value1: value[0], value2: value[1], count: result[key]}
}
console.log(result)
您已经完成了部分任务。
var data = ['141:150.5', '141:150.5', '141:150.5', '224:297.5', '83:351.5', '278:434.5', '332:182', '332:182', '263:135', '256:155', '256:155', '105:65']
var reducer = function (tally, vote) {
if (!tally[vote]) {
tally[vote] = 1
} else {
tally[vote] = tally[vote] + 1;
}
return tally;
}
var result = data.reduce(reducer, {});
var result2 = [];
for (key in result) {
var a = {};
a.value1 = Number(key.split(":")[0]);
a.value2 = Number(key.split(":")[1]);
a.count = result[key];
result2.push(a);
}
console.log(result2);
var m = [];
_.forEach(result,function(value,key){
let k = key.split(':');
m.push({value1:parseInt(k[0]),value2:parseInt(k[1]),count:value});
});
console.log(m)
这是你正在寻找的作品的剧本。它利用了Lodash。祝你今天过得愉快!!!
Object.keys( result ).length
将为您提供键的数量
Just try the below code:
var data = ['141:150.5', '141:150.5', '141:150.5', '224:297.5', '83:351.5', '278:434.5', '332:182', '332:182', '263:135', '256:155', '256:155', '105:65']
var reducer = function(tally, vote) {
if (!tally[vote]) {
tally[vote] = 1
} else {
tally[vote] = tally[vote] + 1;
}
return tally;
}
var result = data.reduce(reducer, {});
console.log(result);
var resultArr = [];
for(var key in result) {
var obj = {};
var splitArr = key.split(":");
obj.value1 = splitArr[0];
obj.value2 = splitArr[1];
obj.count = result[key];
resultArr.push(obj);
}
console.log(resultArr);
Now if you want to access data you can try like this:
console.log(resultArr[0].value1);
console.log(resultArr[0].value2);
console.log(resultArr[0].count);
如果我没有误解你想做什么,你可以通过在中使用for来迭代你的"结果"对象
for (var prop in result) {
if (result.hasOwnProperty(prop )) {
var val = result[prop];
// then output your desired format
}
}
相关文章:
- 正在数组中存储键值对
- 数据表通过分析一列的值对其进行排序
- 如何将新的键/值对元素添加到现有数组
- 在键值对中对求和值进行下划线
- 比较包含多个值对的两个JavaScript数组
- 我想将查询字符串变量添加到JSON名称/值对中
- 返回由键/值对定义的数组
- 在url参数javascript中存储键值对列表
- 设置选项对象关键点:值对以实现带第二个y轴的动态打印
- 将数组转换为键值对
- jQueryAJAX-将额外的键/值对推送到序列化的$_POST数组中
- 从JavaScript中的名称-值对字符串中删除值
- 使用jQuery从ajax调用访问键值对
- 将动态键值对传递给函数
- d3使用键值对对对多个值的数据进行分组
- JS在封装对象中查找键值对
- 删除嵌套的json元素并显示为单独的键值对
- 如何将.reduce函数生成的数组操作为单独的键/值对?(JavaScript)
- 将键值对作为单独的数据Ajax发布
- 如何在 JavaScript 中将具有多个名称/值对的 JSON 字符串数组保存在单独的数组中