Javascript 在JS中按价格对项目数组排序忽略具有相同价格的元素
我试图订购一个带有Javascript的产品列表,脚本运行良好,但是如果两个产品的价格相同,脚本只需忽略其中一个Javascript 在JS中按价格对项目数组排序忽略具有相同价格的元素,javascript,Javascript,我试图订购一个带有Javascript的产品列表,脚本运行良好,但是如果两个产品的价格相同,脚本只需忽略其中一个 function myFunction() {var items = document.querySelectorAll('.vc_visible-item'); var y = document.getElementsByClassName('vc_pageable-slide-wrapper'); var parent = y[0]; var SortElements = new
function myFunction() {var items = document.querySelectorAll('.vc_visible-item');
var y = document.getElementsByClassName('vc_pageable-slide-wrapper');
var parent = y[0];
var SortElements = new Object();
items.forEach(function(item, indx){
var itemValue = parseFloat(item.querySelector('.price-product').textContent.replace('€', '').replace(/\s+/g, ''));
SortElements[itemValue] = {'element': item, 'index': indx} ;
});
var keys = Object.keys(SortElements);
function compareNumeric(a, b) {
a = parseInt(a);
b = parseInt(b);
if (a <= b) return 1;
if (a >= b) return -1;
}
keys.sort(compareNumeric);
keys.map(function(key, indx){
parent.insertAdjacentElement('beforeend', SortElements[key]['element']);
});
}
function myFunction(){var items=document.querySelectorAll('.vc_visible-item');
var y=document.getElementsByClassName('vc_pageable-slide-wrapper');
var parent=y[0];
var sorterelements=新对象();
items.forEach(功能(item,indx){
var itemValue=parseFloat(item.querySelector('.price product').textContent.replace('€','').replace(/\s+/g');
SortElements[itemValue]={'element':项,'index':indx};
});
var keys=Object.keys(分类元素);
函数比较(a,b){
a=parseInt(a);
b=parseInt(b);
如果(a=b)返回-1;
}
key.sort(compareNumeric);
键。映射(功能(键,indx){
parent.insertAdjacentElement('beforeend',sortedelements[key]['element']);
});
}
有人对我如何解决这个问题有什么建议吗?多谢各位 问题不是“排序”,而是覆盖SortElements对象中的键
SortElements[itemValue] = {'element': item, 'index': indx}
如果下一个项目具有相同的价格,那么您将使用新的{element,index}覆盖SortElements[该价格]
我宁愿不插入一个对象。。插入到数组中
function myFunction() {
var items = document.querySelectorAll('.vc_visible-item');
var y = document.getElementsByClassName('vc_pageable-slide-wrapper');
var parent = y[0];
var SortElements = [];
items.forEach(function(item, indx){
var itemValue = parseFloat(item.querySelector('.price-product').textContent.replace('€', '').replace(/\s+/g, ''));
SortElements.push({'element': item, 'price':itemValue, 'index': indx});
});
function compareNumeric(a, b) {
numA = a.price;
numB = b.price;
if (numA < numB) return 1;
if (numA > numB) return -1;
return 0;
}
SortElements.sort(compareNumeric);
SortElements.forEach(function(item){
parent.insertAdjacentElement('beforeend', item.element);
});
}
函数myFunction(){
var items=document.querySelectorAll('.vc_visible-item');
var y=document.getElementsByClassName('vc_pageable-slide-wrapper');
var parent=y[0];
var元件=[];
items.forEach(功能(item,indx){
var itemValue=parseFloat(item.querySelector('.price product').textContent.replace('€','').replace(/\s+/g');
push({'element':item,'price':itemValue,'index':indx});
});
函数比较(a,b){
numA=a.价格;
numB=b.价格;
if(numAnumB)返回-1;
返回0;
}
SortElements.sort(compareNumeric);
分拣设备。forEach(功能(项目){
parent.insertAdjacentElement('beforeend',item.element);
});
}
在items.forEach
循环中,您正在SortElements
对象中使用项的值作为每个属性的名称创建成员。如果循环发现具有该名称的成员已存在,它将用遇到的新值替换该属性的当前值。
您可以在该行周围放置一个条件来检查该属性的存在。如果不深入查看,我建议您在
compareNumeric
中的案例是错误的<代码>如果(ab)返回-1;/*else*/return 0。为什么不return b-a
?已经尝试了这两种解决方案,但都不起作用:(对我来说不起作用:(似乎是tht-SortElements.push在SortElements中插入括号后阻止脚本的执行。push({element':item'price':itemValue,'index':indx});});非常有效,谢谢!)谢谢你的回复!你能帮我查一下密码吗?