如果是其他简写,push方法不能使用javascript

时间:2016-05-20 04:52:08

标签: javascript

我有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)

请建议是否有更好的方法来完成这项工作

2 个答案:

答案 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);