我想要做的是查看“water”的所有值,并通过添加新密钥将值从最低到最高排列:值。
然而,如果水的价值与另一个相同,我想给它分配相同的等级。
到目前为止,我有这个,这是因为它命令然后指定等级,但我不确定如何检查其他值以查看它是否相同。如果它是相同的,我想我只会指定'index'而不是'index + 1'
var results = {
schedules: [
{ water: 10326.11, milk: 231.27, cola: 171.85 },
{ water: 10326.11, milk: 231.27, cola: 171.85 },
{ water: 1500, milk: 231.27, cola: 171.85 }
]
};
results = _(_.sortBy(results.schedules, "water")).forEach(function (water, index) {
water.waterRank = index + 1;
});
console.log(results);
答案 0 :(得分:1)
存储先前的值和上一个索引,检查值是否重复,然后分配索引。像这样的东西
var index = 0, prevValue = 0;
_(_.sortBy(results.schedules, "water")).forEach(function (water, i) {
if(prevValue != water.water) index++;
prevValue = water.water;
results.schedules[i].waterRank = index;
});
console.log(results.schedules);
var results = {
"schedules": [{
"water": 10326.11,
"milk": 231.27,
"cola": 171.85
}, {
"water": 10326.11,
"milk": 231.27,
"cola": 171.85
}, {
"water": 1500,
"milk": 231.27,
"cola": 171.85
}, {
"water": 1500,
"milk": 231.27,
"cola": 171.85
}, {
"water": 10500,
"milk": 231.27,
"cola": 171.85
}, {
"water": 10500,
"milk": 231.27,
"cola": 171.85
}]
};
var index = 0,
prevValue = 0;
_(_.sortBy(results.schedules, "water")).forEach(function(water, i) {
if (prevValue != water.water) index++;
prevValue = water.water;
results.schedules[i].waterRank = index;
});
console.log(results.schedules);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.2.1/lodash.min.js"></script>
&#13;
答案 1 :(得分:0)
这是我的方法:
var rankings = _(results.schedules)
.pluck('water')
.uniq()
.sortBy()
.value();
_.map(results.schedules, function(item) {
return _.defaults({
waterRank: _.indexOf(rankings, item.water) + 1
}, item);
});
第一步是构建rankings
数组。这里的诀窍是uniq()删除了重复的值,因此与其他项目绑定的任何项目都将共享相同的排名。
然后,您只需使用indexOf()将项目映射到排名,即可获得实际排名值。