在对象数组上迭代后无法获得单个值

Can't get single value after iteration on array of objects

我使用此代码迭代 JavaScript 对象数组和 return 值:

this.selectedClient = _.forEach(self.clients, function (client) {
    if (client.IdentityNumber == -1) {
        return client;
    }
}) 

this.clients=[{firstName:"Tywin", lastName:"Lannister", age:46, IdentityNumber:2},
              {firstName:"Arya", lastName:"Starck", age:46, IdentityNumber:-1},
              {firstName:"John", lastName:"Snow", age:46, IdentityNumber:12},
              {firstName:"Robb", lastName:"Starck", age:46, IdentityNumber:24}];

但在迭代完成后,我希望 selectedClient veriable 将获得单个项目:

{firstName:"Arya", lastName:"Starck", age:46, IdentityNumber:-1}

而是 selectedClient veriable 获取 clients 变量中的所有项目。

知道为什么在 clients 变量上迭代后我无法获得单个值吗?

您不能 return 来自 forEach 的数据。

forEach

的 Lodash 文档中复制

Iteratee functions may exit iteration early by explicitly returning false.

使用_.find().

var selectedClient = _.find(clients, function (client) {
    if (client.IdentityNumber == -1) {
        return client;
    }
});

您还可以使用更短的语法,将 Object 作为第二个参数。

_.find(clients, {IdentityNumber: -1});

var clients = [{
    firstName: "Tywin",
    lastName: "Lannister",
    age: 46,
    IdentityNumber: 2
}, {
    firstName: "Arya",
    lastName: "Starck",
    age: 46,
    IdentityNumber: -1
}, {
    firstName: "John",
    lastName: "Snow",
    age: 46,
    IdentityNumber: 12
}, {
    firstName: "Robb",
    lastName: "Starck",
    age: 46,
    IdentityNumber: 24
}];


var selectedClient = _.find(clients, {IdentityNumber: -1});

console.log(selectedClient);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>


对于原版爱好者,请使用 Array#find

clients.find(c => c.IdentityNumber === -1)

var clients = [{
    firstName: "Tywin",
    lastName: "Lannister",
    age: 46,
    IdentityNumber: 2
}, {
    firstName: "Arya",
    lastName: "Starck",
    age: 46,
    IdentityNumber: -1
}, {
    firstName: "Robb",
    lastName: "Starck",
    age: 46,
    IdentityNumber: 24
}];

var selectedClient = clients.find(c => c.IdentityNumber === -1);
console.log(selectedClient);