Javascript 对象中的排名值
Ranking Values in Javascript object
我想做的是查看 "water" 的所有值,并通过在 key:value 中添加新的 key:value 将它们从低到高排列。
但是,如果水的价值与另一个相同,我想给它分配相同的等级。
到目前为止我有这个,它的工作原理是先排序然后分配等级,但我不确定如何检查其他值以查看它是否相同。如果相同,我想我会分配 '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);
存储以前的值和以前的索引,检查值是否重复然后分配索引。像这样
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>
这是我的方法:
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() 将项目映射到排名以获得实际排名值。
我想做的是查看 "water" 的所有值,并通过在 key:value 中添加新的 key:value 将它们从低到高排列。
但是,如果水的价值与另一个相同,我想给它分配相同的等级。
到目前为止我有这个,它的工作原理是先排序然后分配等级,但我不确定如何检查其他值以查看它是否相同。如果相同,我想我会分配 '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);
存储以前的值和以前的索引,检查值是否重复然后分配索引。像这样
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>
这是我的方法:
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() 将项目映射到排名以获得实际排名值。