Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用.each()函数后,从对象数组中删除重复值_Javascript_Jquery_Html_Arrays - Fatal编程技术网

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.