【问题标题】:Comparing elements in an object比较对象中的元素
【发布时间】:2014-11-02 14:27:39
【问题描述】:

我正在开发一个像这样将结果保存到 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.

每次我抓取网页时,它都会添加一个元素。

如果库存和价格等于前一个元素,我想做一个清除元素,但只删除前一个元素,不包括日期。

在这个例子中,由于第三个元素等于第二个,我想删除它。如果 4rth 等于 3rd,则删除它,依此类推。

【问题讨论】:

标签: javascript json object


【解决方案1】:

您可以使用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);
    });
}

【讨论】:

    【解决方案2】:

    DEMO

    因此,您可以通过这种方式迭代您的对象。比你可以删除一个元素与另一个元素比较:

    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--;
        }
    }
    

    【讨论】:

    • 这没有回答问题。
    • 显然是的 (:
    【解决方案3】:

    这里是使用 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 );
    

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多