2017-08-07 69 views
0

我已经得到了多数民众赞成在返回数据的基于REST调用数组,如下所示:如何JSON分类到以儿童财产

[{ 
    name: "one", 
    dayID: "Tuesday}, 
{ 
    name: "two", 
    dayID: "Monday" 
}, 
{ 
    name: 'three' 
    dayID: "Tuesday 
}] 

我试图做的是遍历数据和创建一个具有基于唯一属性的嵌套结构的新数组。所以如果数组已经有一个星期一,请将json推送到该对象。如果不是,请换一个。在这种情况下筑巢的日子下的所有对象,因此新的数组是这样的:

[{"Monday":["two"]}, {"Tuesday":["one", "three"]}] 

这些不会在实践中的字符串,他们将更多的对象,但为简单起见,我在我的例子中要求字符串。任何帮助表示赞赏。

+0

显示你已经尝试过的情况。本网站上有很多很多类似的问题。这里的目标不是为你写代码,而是为了帮助你修复**你的代码** – charlietfl

+0

我还没有尝试过任何东西,我想看看人们会如何处理这个问题。 –

+2

通过使用'Array.reduce' - > https://jsfiddle.net/thgvvm05/ – adeneo

回答

4

而不是数组,你可以返回对象,因为键将是唯一的。

var data = [{ 
 
    name: "one", 
 
    dayID: "Tuesday" 
 
}, { 
 
    name: "two", 
 
    dayID: "Monday" 
 
}, { 
 
    name: 'three', 
 
    dayID: "Tuesday" 
 
}] 
 

 
var result = data.reduce(function(r, e) { 
 
    if (!r[e.dayID]) r[e.dayID] = [e.name]; 
 
    else r[e.dayID].push(e.name); 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

+0

啊哈!有趣。谢谢你给我看。 –

+0

不客气。 –

1

您可以使用Array.reduce更新您的阵列到所需的格式。

您只需要根据条件不断更新accumulating array acc

var data = [{ 
 
    name: "one", 
 
    dayID: "Tuesday"}, 
 
{ 
 
    name: "two", 
 
    dayID: "Monday" 
 
}, 
 
{ 
 
    name: 'three', 
 
    dayID: "Tuesday" 
 
}]; 
 
    
 
data = data.reduce((acc, cur) => { 
 
    if(acc.some(a => a[cur.dayID])) { 
 
    acc.forEach(a => { 
 
     if(a[cur.dayID]) { 
 
     a[cur.dayID].push(cur.name) 
 
     } 
 
    }); 
 
    } else { 
 
    var obj = {}; 
 
    obj[cur.dayID] = [cur.name]; 
 
    acc.push(obj); 
 
    } 
 
    return acc; 
 
}, []); 
 
    
 
console.log(data);

1

使用阵列#减少辅助对象:

var arr = [{ 
 
    name: "one", 
 
    dayID: "Tuesday" 
 
    }, 
 
    { 
 
    name: "two", 
 
    dayID: "Monday" 
 
    }, 
 
    { 
 
    name: 'three', 
 
    dayID: "Tuesday" 
 
    } 
 
]; 
 

 

 
var helperObj = {}; 
 
var result = arr.reduce(function(r, o) { 
 
    if(!helperObj[o.dayID]) { 
 
    helperObj[o.dayID] = []; 
 
    r.push({ [o.dayID]: helperObj[o.dayID] }); 
 
    } 
 
    
 
    helperObj[o.dayID].push(o.name); 
 

 
    return r; 
 
}, []); 
 

 
console.log(result);