【问题标题】:Filter an array of object by object content [duplicate]按对象内容过滤对象数组[重复]
【发布时间】:2016-08-09 07:27:30
【问题描述】:

我正在尝试按内容过滤对象数组,即:

https://jsfiddle.net/z7g3unyu/2/

var arr =[
    {
    "uid": "1",
    "name": "John Doe"
  },
  {
    "uid": "2",
    "name": "Kate Roe"
  }
];

var newArr = arr.filter(function(e) {
    return e["uid"] == 1;
});

alert(newArr["name"]);

我想创建一个新数组,它只包含一个 uid 等于 1 的对象。但是,它给了我未定义的。我做错了什么?

【问题讨论】:

  • 两个问题:你的.filter()回调使用=而不是===用于赋值),alert()调用应该是alert(newArr[0].name)alert(newArr[0]["name"])(两者都可以)。
  • 虽然 = 是一个拼写错误,但第二点正是我要找的!谢谢!

标签: javascript jquery arrays


【解决方案1】:

使用 Lodash

_.filter(array, { uid: 1 });

【讨论】:

    【解决方案2】:

    你在这里赋值:

    return e["uid"] = 1;
    

    使用双等于== 来检查值是否相等:

    return e["uid"] == 1;
    

    请注意,filter() 返回的是 array,而不是 object。使用括号符号[0] 从数组中获取第一个元素。

    查看下面的工作 sn-p

    var arr = [{
        "uid": "1",
        "name": "John Doe"
    }, {
        "uid": "2",
        "name": "Kate Roe"
    }];
    
    var newArr = arr.filter(function(e) {
        return e["uid"] == 1;
    });
    
    alert(newArr[0]["name"]);

    【讨论】:

    • 还要注意filter()返回的是数组,而不是对象
    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2018-11-12
    • 2022-11-27
    • 2021-08-27
    相关资源
    最近更新 更多