我有Array列表,我根据类别将其过滤为对象。最初我使用了if else的简写表达式,它给出了错误,但是函数在一般if else条件下工作正常。我无法通过简写表达来确定问题的原因。 fiddle
var a =[[{'cat':'student','renk':1},{'cat':'student','renk':2},{'cat':'student','renk':10}],[{'cat':'teacher','renk':1},{'cat':'teacher','renk':2}]]
var obj = {}
for(var i=0;i<a.length;i++){
for(var z =0;z<a[i].length;z++){
obj[a[i][z]['cat']]
if(obj[a[i][z]['cat']]){
obj[a[i][z]['cat']].push(a[i][z])
}
else{
obj[a[i][z]['cat']] = [a[i][z]]
}
//obj[a[i][z]['cat']] = obj[a[i][z]['cat']]?obj[a[i][z]['cat']].push(a[i][z]):[a[i][z]]
}
}
console.log(obj)
请建议是否有更好的方法来完成这项工作
答案 0 :(得分:1)
我认为你真的不需要做这一切,从你的样本a
数组中的每个子数组属于同一类别,所以你可以做类似的事情
var a = [
[{
'cat': 'student',
'renk': 1
}, {
'cat': 'student',
'renk': 2
}, {
'cat': 'student',
'renk': 10
}],
[{
'cat': 'teacher',
'renk': 1
}, {
'cat': 'teacher',
'renk': 2
}]
]
var obj = {}
a.forEach(function(array) {
if (array.length) {
obj[array[0].cat] = array; //use array.slice(0) if you want to have a copy of the array
}
})
op.innerHTML = JSON.stringify(obj, null, 2)
<pre id="op"></pre>
但是如果你不确定它并且想要使用三元运算符那么
var a = [
[{
'cat': 'student',
'renk': 1
}, {
'cat': 'student',
'renk': 2
}, {
'cat': 'student',
'renk': 10
}],
[{
'cat': 'teacher',
'renk': 1
}, {
'cat': 'teacher',
'renk': 2
}]
]
var obj = {}
a.forEach(function(array) {
if (array.length) {
array.forEach(function(rec) {
obj[rec.cat] ? obj[rec.cat].push(rec) : obj[rec.cat] = [rec]
})
}
})
op.innerHTML = JSON.stringify(obj, null, 2)
<pre id="op"></pre>
答案 1 :(得分:0)
这就是你想要的:
var a =[[{'cat':'student','renk':1},{'cat':'student','renk':2},{'cat':'student','renk':10}],[{'cat':'teacher','renk':1},{'cat':'teacher','renk':2}]];
var obj = {};
for(var i=0; i<a.length; i++) {
for(var z=0; z<a[i].length; z++) {
//obj[a[i][z]['cat']] //I have commented this as its not needed
if(obj[a[i][z]['cat']]) {
obj[a[i][z]['cat']].push(a[i][z]);
}
else {
obj[a[i][z]['cat']] = [a[i][z]];
}
//obj[a[i][z]['cat']] = obj[a[i][z]['cat']]?obj[a[i][z]['cat']].push(a[i][z]):[a[i][z]]
}
}
console.log(obj);