【问题标题】:Filter objects in Javascript在 Javascript 中过滤对象
【发布时间】:2014-08-28 17:41:12
【问题描述】:

是否有快速过滤对象数组以仅返回每个对象中的几个属性的方法?

例如我们有以下数据:

var objArr = [{

    "Title": "July 13 - July 19 2014",
        "displayAd_imp": "3,500",
        "videoAd_imp": "1.5",
        "tv_imp": "0.52",
        "Date": "2014-07-17T00:00:00.000Z",
        "WeekNo": 29
}, {

    "Title": "July 20 - July 26 2014",
        "displayAd_imp": "1,600",
        "videoAd_imp": "2.55",
        "tv_imp": "0.052",
        "Date": "2014-07-24T00:00:00.000Z",
        "WeekNo": 30
}, {

    "Title": "July 27 - Aug 2 2014",
        "displayAd_imp": "1,500",
        "videoAd_imp": "2.1",
        "tv_imp": "0.122",
        "Date": "2014-07-31T00:00:00.000Z",
        "WeekNo": 31
}]

我正在尝试过滤上面的数组以获取另一个仅包含 videoAd_impvideoAd_imptv_imp 的数组。所以它看起来像这样:

 [{

            "displayAd_imp": "3,500",
            "videoAd_imp": "1.5",
            "tv_imp": "0.52",
    }, {

            "displayAd_imp": "1,600",
            "videoAd_imp": "2.55",
            "tv_imp": "0.052",

    }, {

            "displayAd_imp": "1,500",
            "videoAd_imp": "2.1",
            "tv_imp": "0.122",
}]

提前致谢!

【问题讨论】:

  • 如果你想修改原始对象,只需循环它们,然后使用delete 删除你不想要的东西。如果您想要新对象,请使用.map() 并返回仅包含您确实想要的东西的新对象。没有内置的解决方案。
  • 您是否有不想按原样使用该对象的原因? (不是说你应该;只是好奇。)
  • ...此数据是否以 JSON 数据的形式到达?如果是这样,这可以使用JSON.parse() 自动完成。

标签: javascript jquery arrays object filter


【解决方案1】:

像下面这样使用Array.map

如果您想要对所有对象的新引用。

var newArr = objArr.map(function (obj) {
     return {displayAd_imp:obj.displayAd_imp,videoAd_imp:obj.videoAd_imp,tv_imp:obj.tv_imp};
})

console.log(newArr);

如果您想获得原始参考,请使用如下方式

var newArr = objArr.map(function (obj) {
    delete obj.Date;
    delete obj.WeekNo;
    delete obj.Title
    return obj;
})

【讨论】:

    【解决方案2】:
    var objArr = [{/* ... */}];
    
    // cache the array length to avoid resolving it on every iteration
    var arrLength = objArr.length;
    // your new array
    var newArr = [];
    
    for(var i=0; i<arrLength; i++){
        // push only the properties you want to the new array
        newArr.push({
            displayAd_imp: objArr[i].displayAd_imp,
            videoAd_imp: objArr[i].videoAd_imp,
            tv_imp: objArr[i].tv_imp
        });
    }
    // show it in the console
    console.log(newArr);
    

    JS Fiddle Demo

    【讨论】:

      【解决方案3】:

      这是一个简单的解决方案

      var newArr = []
      
      for(var i=0;i<objArr.length) {
          newArr.push({
              displayAd_imp: objArr[i].displayAd_imp,
              videoAd_imp: objArr[i].videoAd_imp,
              tv_imp: objArr[i].tv_imp
             }
          );
      }
      

      【讨论】:

        猜你喜欢
        • 2019-10-02
        • 2017-06-06
        • 2020-05-29
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多