0

我有以下形式的 javascript 对象:

{ url1: {status: "ok", updatedAt: someDate1},
  url2: {status: "error", updatedAt: someDate2},
  url3: {status: "error", updatedAt: someDate3},
  ...
}

我想创建一个新对象,其中包含“状态”属性为“错误”的所有元素。
在上面的示例中,我希望创建以下对象:

  { url2: {status: "error", updatedAt: someDate2},
    url3: {status: "error", updatedAt: someDate3} 
  }
4

2 回答 2

4

遍历所有属性并复制匹配的对象?

function filterByProperty(obj, predicate) {
   var selected={};
   for (p in obj) {
      if (obj.hasOwnProperty(p) && predicate(obj[p])) {
         selected[p] = obj[p];
      } 
   }
   return selected;
}

并调用使用

filterByProperty(object, function(o) {o.status === "error";});

我喜欢将函数作为参数传递......

于 2012-09-12T12:32:54.797 回答
3

这应该做你需要的(o是你的原始对象):

var errorObj = {};
for (k in o){
    var v = o[k];
    if (v.status === 'error'){
        errorObj[k] = v;
    }
}
于 2012-09-12T12:27:33.460 回答