首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要一个算法来操纵javascript中的数组结构

我需要一个算法来操纵javascript中的数组结构
EN

Stack Overflow用户
提问于 2011-11-28 19:36:11
回答 4查看 99关注 0票数 2

在javascript中,下面是我的开始数组:

代码语言:javascript
运行
复制
[{
   name: 'aaa',
   value: 1
 },
 {
   name: 'bbb',
   value: 0
 },
 {
   name: 'bbb',
   value: 1
}]

因此,我想将其转换为以下数组:

代码语言:javascript
运行
复制
[{
   name: 'aaa',
   value: 1
 },
 {
   name: 'bbb',
   value: [0, 1]
 }]

我需要一个好的和简单的算法来做这件事

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-28 19:44:37

这样如何:

代码语言:javascript
运行
复制
var array = [{
   name: 'aaa',
   value: 1
 },
 {
   name: 'bbb',
   value: 0
 },
 {
   name: 'bbb',
   value: 1
}];

var map = {};    
for(var i = 0; i < array.length; i++) {
  var name = array[i].name;
  if (map[name] === undefined) {
    map[name] = [];
  }
  map[name].push(array[i].value);
}

var result = [];
for(var key in map) {
  var value = map[key];
  result.push({
    name: key, 
    value: value.length === 1 ? value[0] : value
  });
}

最简单的方法是创建一个映射来跟踪使用了哪些名称。然后将此映射转换回对象数组。

如果要对value使用数组,则将其更改为:

代码语言:javascript
运行
复制
result.push({
  name: key, 
  value: value
});
票数 2
EN

Stack Overflow用户

发布于 2011-11-28 19:42:41

下面是用于最简单实现的伪代码

代码语言:javascript
运行
复制
hash = {}
for(pair in array) {
    hash[pair.name] ||= []
    hash[pair.name] << pair.value
}

result = []
for(k, v in hash) {
    result << {name: k, value: v}
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-28 19:58:25

此函数可以实现此功能

代码语言:javascript
运行
复制
function consolidate(var arrayOfObjects)    
{
    // create a dictionary of values first
    var dict = {};
    for(var i = 0; i < arrayOfObjects.length; i++)
    {
        var n = arrayOfObjects[i].name;
        if (!dict[n])
        {
            dict[n] = [];
        }
        dict[n].push(arrayOfObjects[i].value);
    }

    // convert dictionary to array again        
    var result = [];
    for(var key in dict)
    {
        result.push({
            name: key,
            value: dict[key].length == 1 ? dict[key][0] : dict[key]
        });
    }

    return result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8295233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档