Javascript 根据年龄值将对象数组拆分为一个或多个新数组

Javascript 根据年龄值将对象数组拆分为一个或多个新数组,javascript,arrays,Javascript,Arrays,根据Javascript中的年龄值将对象数组拆分为新数组或对象 var items = [ {name:"Foo", age:16, color:"w"}, {name:"Bar", age:18, color:"b"}, {name:"foo", age:16, color:"w"}, {name:"bar", age:18, color:"w"}, {name:"foobar", age:18, color:"b"}, {name:"barfo

根据Javascript中的年龄值将对象数组拆分为新数组或对象

var items = [
    {name:"Foo", age:16, color:"w"},
    {name:"Bar", age:18, color:"b"},
    {name:"foo", age:16, color:"w"},
    {name:"bar", age:18, color:"w"},
    {name:"foobar", age:18, color:"b"},
    {name:"barfoo", age:20, color:"w"}
];
如何返回如下列表:

var items = [
    {age:16,name:"Foo"|"foo",gender:"w"|"w"},
    {age:18,name:"Bar"|"bar"|"foobar",gender:"b"|"w"|"b"},
    {age:20,name:"barfoo",gender:"w"}
];
我已经工作了,但是我得到了名为“undefined”的输出。下面是我的代码

var data = [{age: 21,name: "Walter",color: "black"},{age: 25,name: "sentinel",color: "black"
},{age: 21,name: "Micah",color: "purple"},{age: 25,name: "mike",color: "black"},{age: 21,name: "Danny",color: "white"},{age: 25,name: "mike",color: "black"}];
var obj=data;
var arrayobj = obj.length;
var i, row, arr = obj, ss = {};
for (i = 0; i < arr.length; i++) {
    row = arr[i];   
    ss[row.age] = ss[row.age] || {count: 0};
    if (ss[row.age][row.age] === undefined) {                          
        ss[row.age][row.name] = row.name;
        ss[row.age]['name']+=row.name+'|';
        ss[row.age]['color']+=row.color+'|';
        ss[row.age]['count'] += 1;
    }
}
console.table(ss);
var data=[{age:21,name:“Walter”,color:“black”},{age:25,name:“sentinel”,color:“black”
},{年龄:21岁,姓名:“迈卡”,颜色:“紫色”},{年龄:25岁,姓名:“迈克”,颜色:“黑色”},{年龄:21岁,姓名:“丹尼”,颜色:“白色”},{年龄:25岁,姓名:“迈克”,颜色:“黑色”};
var obj=数据;
var arrayobj=对象长度;
变量i,行,arr=obj,ss={};
对于(i=0;i
我假设您希望按年龄对项目进行分组。这里有一个方法:

()

让我们解释一下:

  • 对于每个项目,如果我们还没有一个“bucket”,那么创建一个新的空bucket
  • 把它加到桶里
  • 返回新更新的存储桶列表

该方法返回一个具有3个属性的对象:16、18和20,每个属性都包含该年龄段的对象。

这将起作用。输出的格式与exebook提供的格式不同

var items = [
     {name:"Foo", age:16, color:"w"},
     {name:"Bar", age:18, color:"b"},
     {name:"foo", age:16, color:"w"},
     {name:"bar", age:18, color:"w"},
     {name:"foobar", age:18, color:"b"},
     {name:"barfoo", age:20, color:"w"}
];

var result = [] // THIS IS THE RESULTING ARRAY THAT YOU WANT

function find(age) {
    for (var i = 0; i < result.length; i++)
        if (result[i].age == age) return i
    return -1
}

function append(i, obj) {
    result[i].name.push(obj.name)
    result[i].color.push(obj.color)
}

for (var i = 0; i < items.length; i++) {
    var x = find(items[i].age)
    if (x < 0) result.push({ age: items[i].age, name: [items[i].name], color : [items[i].color]})
    else append(x, items[i])
}

console.log(result) // PRINT THE RESULT, alternatively you can use alert(result)
请检查确认

**用户体验经理

var buckets = [];

for (var item in items) {
    var currentAge = items[item].age;

    if(!buckets[currentAge]) {
        buckets[currentAge] = [];
        for (var i in items) {      
            if (currentAge === items[i].age) {
                buckets[currentAge].push(items[i]);
            }
        }
    }

}

有任何原因导致这些
|
?你是说嵌套数组吗?最终的结果是无效的语法。与大多数编程问题一样,您需要对问题进行推理,提出合适的算法,并加以实现。@BenjaminGruenbaum:虽然从技术上讲,语法不是无效的,但这肯定不是提问者想要做的。@Qantas940您是对的,这不是无效的语法-只是所有那些按位OR的有趣语法:)这个问题是离题的,因为“询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案,为什么它们不起作用,以及预期的结果”.我打赌OP意味着
|
将成为字符串中的分隔符。我还打赌OP会花一点功夫找出如何做到这一点。简洁明了。留给OP在每个元素的名称和颜色属性上调用join(“|”)来迭代存储桶。@BlueSkies我很抱歉,但我无法抗拒减少的机会(因为这确实是一个简单的一步问题-我不确定“OP尝试了什么”在这里是否相关,但我完全接受批评。谢谢。我想要新的对象数组。你能帮帮我吗。@user3026304:你被困在哪里了?你不知道怎么做?谢谢,我喜欢这个!这个答案与我的期望非常相关。
[ { age: 16, name: [ 'Foo', 'foo' ], color: [ 'w', 'w' ] },
  { age: 18, name: [ 'Bar', 'bar', 'foobar' ], color: [ 'b', 'w', 'b' ] },
  { age: 20, name: [ 'barfoo' ], color: [ 'w' ] } ]
var buckets = [];

for (var item in items) {
    var currentAge = items[item].age;

    if(!buckets[currentAge]) {
        buckets[currentAge] = [];
        for (var i in items) {      
            if (currentAge === items[i].age) {
                buckets[currentAge].push(items[i]);
            }
        }
    }

}