使用特定条件对对象组进行分组

时间:2015-07-31 15:16:39

标签: javascript jquery

此问题与this other question有关。

对不起,我无法找到解决方案。我需要通过属性dataObjectobjetivoid中给出的对象数组分组,其属性为:indicadoresobjetivoperspetivavar res = dataObject.reduce(function(res, currentValue) { if ( res.indexOf(currentValue.objetivo) === -1 ) { res.push(currentValue.objetivo); } return res; }, []).map(function(objetivo) { return { objetivo: objetivo, indicadores: dataObject.filter(function(_el) { return _el.objetivo === objetivo; }).map(function(_el) { return _el.indicador; }), perspetiva: dataObject.perspetiva, id: dataObject.id } }); console.log(res);

这是我的代码:

objetivo

哪个是按perspetiva正确分组,但是idpublic void eat(String item){ //update the game's message with one of the following options: //1:"you are not holding an item" //2:"item is not edible" //3:"Yum, that was a tasty item!" if(items == null){ message = "You are not holidng anything."; } else{ for(Item i: items){ if(i.isEdible()){ message = "Yum, that was tasty!"; items.remove(i); } else{ message = "That is not edible."; } } } } 返回未定义。

如果这与其他问题重复,请感谢您的帮助和抱歉。

1 个答案:

答案 0 :(得分:1)

您正在尝试访问dataObject.id.perspetiva,但dataObject是您的主阵列,并且没有这些字段。

reduce选出唯一objetiva后,请返回并找到他们来自的项目:

.map(function(objetivo) {
    var items = dataObject.filter(function(_el) {
        return _el.objetivo === objetivo;
    });

然后你可以找到所有indicador,因为看起来idperspetiva对于具有相同objetiva的项目是一致的,你可以选择第一个。

    return {
        objetivo: objetivo,
        indicadores: items.map(function(_el) { return _el.indicador; }),
        perspetiva: items[0].perspetiva,
        id: items[0].id
    }

这是a working fiddle