Javascript 使用.each()函数后,从对象数组中删除重复值
我有一个Javascript 使用.each()函数后,从对象数组中删除重复值,javascript,jquery,html,arrays,Javascript,Jquery,Html,Arrays,我有一个each函数,它获取html表的td元素,并将它们放在一个对象数组中。我的问题是,我只需要表中的唯一值。这导致我的数组具有重复的值。理想情况下,我希望看到Product和valProduct的唯一值valProduct基本上与“Product”相同。以下是我的尝试: var数组_return=[]; $(“.table_uproduct td:nth child(1)”。每个(函数(){ array\u return.push({ “产品”:$(this.html(), “valPro
each
函数,它获取html表的td
元素,并将它们放在一个对象数组中。我的问题是,我只需要表中的唯一值。这导致我的数组具有重复的值。理想情况下,我希望看到Product
和valProduct
的唯一值valProduct
基本上与“Product”相同。以下是我的尝试:
var数组_return=[];
$(“.table_uproduct td:nth child(1)”。每个(函数(){
array\u return.push({
“产品”:$(this.html(),
“valProduct”:$(this.html())
});
});
数组_return.sort(函数(a,b){
返回a.产品-b.产品;
});
//从数组中删除所有重复项
for(var i=0;i
苹果
3384
苹果手机
三星
8800
银河系
LG
8684
V20
谷歌
8179
像素
黑莓
4554
风暴
摩托洛拉
6764
Z力
租赁收入
-2100000
租赁收入
-2095011
租赁收入
-2095010
ECS/ACH
4493
ECS/ACH
4494
ECS/ACH
4495
我认为最好将唯一项复制到新数组,而不是使用正在使用的循环。这部分代码的问题是:
for (var i = 0; i < array_return.length - 1; i++) {
if (array_return[i].Product == array_return[i + 1].Product) {
delete array_return[i];
}
}
for(var i=0;i
这是:
1) 当您从数组中删除一个项(比如索引3处的项)时,索引4处的项将变为项目3,但当您在循环中增加i时,它将检查索引4(以前是索引5),而索引4永远不会被检查。我将其重写为:
var newArray = [];
newArray.push(array_return[0]);
for (var i = 1; i < array_return.length; i++) {
if (array_return[i].Product != array_return[i - 1].Product) {
newArray.push(array_return[i]);
}
}
array_return = newArray;
var newArray=[];
push(array_return[0]);
对于(var i=1;i
我不能保证语法是完美的,但这绝对是个好主意。错误的原因有两个:
排序数组的值不会分配回任何位置
通过删除for
循环中的键来修改数组
您需要做的是在for
循环中定义一个新数组,而不是修改原始数组,然后将新数组分配给原始数组
有关示例,请参见以下代码:
var数组_return=[];
var筛选的_数组=[];
var筛选的_数组_键=[];
$(“.table_uproduct td:nth child(1)”。每个(函数(){
array\u return.push({
“产品”:$(this.html(),
“valProduct”:$(this.html())
});
});
//从数组中删除所有重复项
for(var i=0;i
苹果
3384
苹果手机
三星
8800
银河系
LG
8684
V20
谷歌
8179
像素
黑莓
4554
风暴
摩托洛拉
6764
Z力
租赁收入
-2100000
租赁收入
-2095011
租赁收入
-2095010
ECS/ACH
4493
ECS/ACH
4494
ECS/ACH
4495
您需要更改的是做什么还是不做什么?@ElliottFrisch我删除了标记,它显然不适合发布此示例中所需的输出。上面的代码没有正确地从数组中删除重复项。如果将此代码放入JSFIDLE,您将看到“两件事:1”的可能重复项。。。“?@MikeMcCaughan很抱歉,答案发布错误,我更新了答案。
var array_return = [];
$(".table__product td:nth-child(1)").each(function() {
var value = $(this).html();
// check if a product with value is already exist
var exist = array_return.find(function(e){
return e.Product == value;
});
// if exist, don't save
if(exist) return;
// else push it
array_return.push({
"Product": value,
"valProduct": value
});
});
// no need for more filtering.