我试图根据每个对象上的属性来匹配和分组对象,并将它们放在自己的数组中,我可以使用它来稍后对某些选择条件进行排序。排序方法对我来说不是一个选项,因为我需要对属性的4个不同值进行排序。
如何为具有匹配属性的对象动态创建单独的数组?
例如,如果我知道form.RatingNumber将是1,2,3或4,我可以这样做:
var ratingNumOne = [],
ratingNumTwo,
ratingNumThree,
ratingNumFour;
forms.forEach(function(form) {
if (form.RatingNumber === 1){
ratingNumOne.push(form);
} else if (form.RatingNumber === 2){
ratingNumTwo.push(form)
} //and so on...
});
问题是form.RatingNumber属性可以是任何数字,因此硬编码1,2,3,4将不起作用。
如何通过每个RatingNumber动态地对表单进行分组?
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以使用对象并以form.RatingNumber
为键。
如果基于零的值没有间隙,则可以使用数组而不是对象。
var ratingNumOne = [],
ratingNumTwo = [],
ratingNumThree = [],
ratingNumFour = [],
ratings = { 1: ratingNumOne, 2: ratingNumTwo, 3: ratingNumThree, 4: ratingNumFour };
// usage
ratings[form.RatingNumber].push(form);
答案 2 :(得分:0)
尝试使用“RatingNumber”作为属性创建一个对象:
rating = {};
forms.forEach(function(form) {
if( !rating[form.RatingNumber] ){
rating[form.RatingNumber] = []
}
rating[form.RatingNumber].push( form )
})
答案 3 :(得分:0)
尝试这是一项工作:
forms.forEach(form => {
if (!window['ratingNumber' + form.RatingNumber]) window['ratingNumber' + form.RatingNumber] = [];
window['ratingNumber' + form.RatingNumber].push(form);
});
这将自动创建变量。最后它看起来像这样:
ratingNumber1 = [form, form, form];
ratingNumber2 = [form, form];
ratingNumber100 = [form];
但要注意ratingNumber3
(例如)也可能未定义。
只是说它,你的解决方案毫无意义,但这个版本起作用了。
答案 4 :(得分:0)
使用RatingNumber
获得的数字并不重要,只需将其用作索引即可。结果将是一个以RatingNumber
作为索引的对象和一个以RatingNumber
为值的对象数组。
//example input
var forms = [{RatingNumber:5 }, {RatingNumber:6}, {RatingNumber:78}, {RatingNumber:6}];
var results = {};
$.each(forms, function(i, form){
if(!results[form.RatingNumber])
results[form.RatingNumber]=[];
results[form.RatingNumber].push(form);
});
console.log(results);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
HIH
答案 5 :(得分:0)
// Example input data
let forms = [{RatingNumber: 1}, {RatingNumber: 4}, {RatingNumber: 2}, {RatingNumber: 1}],
result = [];
forms.forEach(form => {
result[form.RatingNumber]
? result[form.RatingNumber].push(form)
: result[form.RatingNumber] = [form];
});
// Now `result` have all information. Next can do something else..
let getResult = index => {
let res = result[index] || [];
// Write your code here. For example VVVVV
console.log(`Rating ${index}: ${res.length} count`)
console.log(res)
}
getResult(1)
getResult(2)
getResult(3)
getResult(4)