比较对象中的元素

3
我正在开发一个爬虫程序,将结果保存为如下格式的JSON文件:
{"Productos" : [
   {"Title":"Grabador de voz ISD1932","Results": [
      {"Stock":1,"Price":11.4,"Fecha":"18-8-2014:3:36"},
      {"Stock":1,"Price":12.4,"Fecha":"18-8-2014:3:38"},
      {"Stock":1,"Price":12.4,"Fecha":"19-8-2014:0:40"},
      {"Stock":1,"Price":12.4,"Fecha":"19-8-2014:21:46"},
      {"Stock":1,"Price":12.4,"Fecha":"21-8-2014:22:4"},
      {"Stock":1,"Price":12.4,"Fecha":"22-8-2014:0:40"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:0:48"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"}, 
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"}],
    "id":"4a1e90d7-e578-4bd5-b888-38c7bbfb4af5"}]}

首先,结果中的第一个元素将是:
{"Stock":1,"Price":11.4,"Fecha":"18-8-2014:3:36"} 

第二个是:
{"Stock":1,"Price":12.4,"Fecha":"18-8-2014:3:38"} 

第三个是:
{"Stock":1,"Price":12.4,"Fecha":"19-8-2014:0:40"} and so.

每次我爬取网络时,都会添加一个元素。
我想做一个更干净的程序,如果股票和价格与前一个相等,则删除一个元素,但仅限于之前的元素,不包括日期。
在这个例子中,由于第三个元素等于第二个元素,所以我想删除它。如果第四个元素等于第三个元素,则删除它,依此类推。

我认为这个链接对你很有用。 - KyawLay
@KyawLay 的意思是 链接 他发布了正确的链接,但不小心变成了失效的链接.. 请尝试这个链接。 - Deepak Sharma
我链接的演示是否是你所需的? - Luca Davanzo
3个回答

0

演示

因此,您可以迭代您的对象。然后,您可以通过与另一个元素进行比较来删除一个元素:

var arr = {"Productos" : [
   {"Title":"Grabador de voz ISD1932","Results": [
      {"Stock":1,"Price":11.4,"Fecha":"18-8-2014:3:36"},
      {"Stock":1,"Price":12.4,"Fecha":"18-8-2014:3:38"},
      {"Stock":1,"Price":12.4,"Fecha":"19-8-2014:0:40"},
      {"Stock":1,"Price":12.4,"Fecha":"19-8-2014:21:46"},
      {"Stock":1,"Price":12.4,"Fecha":"21-8-2014:22:4"},
      {"Stock":1,"Price":12.4,"Fecha":"22-8-2014:0:40"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:0:48"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"}, 
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"},
      {"Stock":1,"Price":12.4,"Fecha":"23-8-2014:13:56"}],
    "id":"4a1e90d7-e578-4bd5-b888-38c7bbfb4af5"}]};

var data = arr.Productos[0].Results;

for(var i = 0; i != data.length; i++) {
    var stock = data[i].Stock;
    var price = data[i].Price;
    var fecha = data[i].Fecha;
    if( i < data.length - 1 && fecha === data[i + 1].Fecha) {
        data.splice(i + 1,1);
        i--;
    }
}

那并没有回答问题。 - Sebastien C.
显然是的,而不是(: - Luca Davanzo

0

你可以轻松地使用array.filter来实现:

var data = ...;

for(var i = 0 ; i < data.Productos.length ; i++) {
    var p = data.Productos[i];
    p.Results = p.Results.filter(function(o, i, a) {
        return i == 0 || !(o.Stock == a[i - 1].Stock && o.Price == a[i - 1].Price);
    });
}

0

这是使用JavaScript的原始代码:

 var  jsonObj  =  { "result" : {} }  
 var  results  =  {};  
 var  tempArr  =  [];  
for(var i = 0; i < 10; i++){  
  var stock = i+20;  
  var price = "14."+(i+10);  
  var fetch = '12'+i  
  results = {'stock' : stock, 'price' : price, 'fetch' : fetch };  
  if(i==0) tempArr.push(results);  
  else {       
  var lastObj = tempArr[ tempArr.length-1 ];  
  if( lastObj.stock == stock && lastObj.price == price ){  
     console.log("match found"); // if match found dont add  
  }  
  else tempArr.push( results );     
 }  
}  
jsonObj.result = tempArr;  
JSON.stringify( jsonObj );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接