Javascript 按分区/组排列的类型脚本
假设我们有一个对象的初始数组:Javascript 按分区/组排列的类型脚本,javascript,typescript,sorting,rank,Javascript,Typescript,Sorting,Rank,假设我们有一个对象的初始数组: {vendor:"vendor1", item:"item1", price:1100, rank:0}, {vendor:"vendor1", item:"item2",price:3200, rank:0}, {vendor:"vendor1", item:"item3", price:1100, rank:0}, {vendor:"vendor2", item:"item1", price:2000, rank:0}, {vendor:"vendor2",
{vendor:"vendor1", item:"item1", price:1100, rank:0},
{vendor:"vendor1", item:"item2",price:3200, rank:0},
{vendor:"vendor1", item:"item3", price:1100, rank:0},
{vendor:"vendor2", item:"item1", price:2000, rank:0},
{vendor:"vendor2", item:"item2",price:2000, rank:0},
{vendor:"vendor2", item:"item3", price:3200, rank:0},
{vendor:"vendor3", item:"item1", price:3200, rank:0},
{vendor:"vendor3", item:"item2",price:1100, rank:0},
{vendor:"vendor3", item:"item3", price:2000, rank:0},
如何根据价格属性,将其项目类别与具有相同项目的所有供应商进行比较,以填充排名
预期结果:
{vendor:"vendor1", item:"item1", price:1100, rank:1},
{vendor:"vendor1", item:"item2",price:3200, rank:3},
{vendor:"vendor1", item:"item3", price:1100, rank:1},
{vendor:"vendor2", item:"item1", price:2000, rank:2},
{vendor:"vendor2", item:"item2",price:2000, rank:2},
{vendor:"vendor2", item:"item3", price:3200, rank:3},
{vendor:"vendor3", item:"item1", price:3200, rank:3},
{vendor:"vendor3", item:"item2",price:1100, rank:1},
{vendor:"vendor3", item:"item3", price:2000, rank:2},
试试这个。排名是根据价格值创建的
var arr=[{供应商:“供应商1”,项目:“项目1”,价格:1000,排名:0},{供应商:“供应商1”,项目:“项目2”,价格:1000,排名:0},{供应商:“供应商1”,项目:“项目3”,价格:1000,排名:0},{供应商:“供应商2”,项目:“项目1”,价格:2000,排名:0},{供应商:“供应商2”,项目:“项目:“项目2”,价格:2000,排名:0},{供应商:“供应商:“供应商2”,项目:“项目3”,价格:2000,排名:0},{供应商:“卖方3”,项目:“项目1”,价格:3000,排名:0},{卖方:“卖方3”,项目:“项目2”,价格:3000,排名:0},{卖方:“卖方3”,项目:“项目3”,价格:3000,排名:0});
arr.forEach(a=>a.rank=(a.price/1000))
console.log(arr)
您可以使用map函数
var arr=[{供应商:“供应商1”,项目:“项目1”,价格:1000,排名:0},
{供应商:“供应商1”,项目:“项目2”,价格:3000,排名:0},
{供应商:“供应商1”,项目:“项目3”,价格:1000,排名:0},
{供应商:“供应商2”,项目:“项目1”,价格:2000,排名:0},
{供应商:“供应商2”,项目:“项目2”,价格:2000,排名:0},
{供应商:“供应商2”,项目:“项目3”,价格:3000,排名:0},
{供应商:“供应商3”,项目:“项目1”,价格:3000,排名:0},
{供应商:“供应商3”,项目:“项目2”,价格:1000,排名:0},
{供应商:“供应商3”,项目:“项目3”,价格:2000,排名:0}];
arr.map(a=>a.rank=(a.price/1000))
console.log(arr)
步骤:
让arr=[{供应商:“供应商1”,项目:“项目1”,价格:1000,排名:0},
{供应商:“供应商1”,项目:“项目2”,价格:3000,排名:0},
{供应商:“供应商1”,项目:“项目3”,价格:1000,排名:0},
{供应商:“供应商2”,项目:“项目1”,价格:2000,排名:0},
{供应商:“供应商2”,项目:“项目2”,价格:2000,排名:0},
{供应商:“供应商2”,项目:“项目3”,价格:3000,排名:0},
{供应商:“供应商3”,项目:“项目1”,价格:3000,排名:0},
{供应商:“供应商3”,项目:“项目2”,价格:1000,排名:0},
{供应商:“供应商3”,项目:“项目3”,价格:2000,排名:0},]
let items=[…新集合(arr.map(o=>o.item))]
让resultar=[]
items.forEach(item=>{
让filteredar=arr.filter(o=>o.item==item)
过滤数据排序((a,b)=>(a.price>b.price)?1:((b.price>a.price)?-1:0)
for(设i=0;i(a.vendor>b.vendor)?1:((b.vendor>a.vendor)?-1:0)
console.log(resultar)
您可以收集分组的价格
,对它们进行排序,并将更正后的索引应用为排名
var数据=[{供应商:“供应商1”,项目:“项目1”,价格:1100,排名:0},{供应商:“供应商1”,项目:“项目2”,价格:3200,排名:0},{供应商:“供应商1”,项目:“项目3”,价格:1100,排名:0},{供应商:“供应商2”,项目:“项目1”,价格:2000,排名:0},{供应商:“供应商2”,项目:“项目:“项目2”,价格:2000,排名:0},{供应商:“供应商2”,项目:项目3”,价格:3200,排名:0},{供应商:“供应商3”,项目:“项目1”,价格:3200,排名:0},{供应商:“供应商3”,项目:“项目2”,价格:1100,排名:0},{供应商:“供应商3”,项目:“项目3”,价格:2000,排名:0},
collection=data.reduce((r,o)=>((r[o.item]=r[o.item]| |[])。push(o.price),r),{});
Object.values(collection.forEach)(a=>a.sort((a,b)=>a-b));
data.forEach(o=>o.rank=collection[o.item].indexOf(o.price)+1);
console.log(数据);
。作为控制台包装{max height:100%!important;top:0;}
您可以基于项目和价格创建数组。然后,循环排序的数组,并根据上一个项目是否与当前项目相同来分配排名:
const arr=[{vendor:“vendor1”,item:“item1”,price:1100,rank:0},{vendor1”,item:“vendor1”,price:3200,rank:0},{vendor:“vendor1”,price:1100,rank:0},{vendor:“vendor2”,item:“vendor2”,item:“vendor2”,item:“vendor3”,price:3200,rank:0},item:“vendor1”,item:“vendor2”,item:“vendor1”,item:“vendor1,{“,价格:3200,排名:0},{供应商:“供应商3”,项目:“项目2”,价格:1100,排名:0},{供应商:“供应商3”,项目:“项目3”,价格:2000,排名:0}]
const output=arr.sort((a,b)=>a.item.localeCompare(b.item)| | a.price-b.price)
.map((o,i)=>{
const prev=arr[arr.length-1]
const rank=prev&&prev.item==o.item
?前等级+1
: 1;
返回{…o,秩}
})
console.log(输出)
您如何计算此处的排名?{供应商:“vendor1”,物品:“item2”,价格:3000,排名:3}哦,这是价格/1000吗?@gyc,我已经修改了这个问题,数据有点不一致。假设你能填补这个职位。为什么之前和之后的价格也发生了变化?请检查输入数据和输出数据。您提供的数据不正确,我认为或者您有一些不同的算法。我已经修改了问题。但是,您的问题和预期结果不相同,价格值是否有任何条件。请详细说明