如何从数组中返回一个对象?

时间:2017-02-11 17:14:43

标签: javascript node.js underscore.js

我有一个对象数组,我想搜索每个对象并检查数据是否与给定值匹配,我想将对象从数组中返回,如果找不到,那么我必须返回undefined。

这是我到目前为止所做的:

var data = [{
  id: 1,
  firstName: 'John',
  lastName: 'Smith'
}, {
  id: 2,
  firstName: 'Jane',
  lastName: 'Smith'
}, {
  id: 3,
  firstName: 'John',
  lastName: 'Doe'
}];
var asf[] = data[0];
return asf;

如果if else语句中的条件匹配,我试图返回该对象但是它在返回数组对象时给出了错误。

我也在尝试使用_.findwhere(data, pid)这是下划线模块中的方法,我可以用它来将对象从数组中返回吗?

3 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.find(),如下所示:

var data = [{
  id: 1,
  firstName: 'John',
  lastName: 'Smith'
}, {
  id: 2,
  firstName: 'Jane',
  lastName: 'Smith'
}, {
  id: 3,
  firstName: 'John',
  lastName: 'Doe'
}];

data.find(x => {x.id === 1});

如果您想了解有关数组的更多信息,请访问此链接。

http://exploringjs.com/es6/ch_arrays.html

答案 1 :(得分:0)

我不确定您是否要返回该对象或删除该对象,因此我将向您展示如何同时执行这两项操作很简单。

这是您数据的整理版本:

// this is your data
var data = [{
  id: 1,
  firstName: 'John',
  lastName: 'Smith'
}, {
  id: 2,
  firstName: 'Jane',
  lastName: 'Smith'
}, {
  id: 3,
  firstName: 'John',
  lastName: 'Doe'
}];

这是你用来从数组中返回目标对象的循环:

// loop through the data array
for(var i = 0; i < data.length; i++) {
  // check if the current item is "John Smith"
  if(data[i].firstName == "John" && data[i].lastName == "Smith") {
    return data[i];
  }
  // continue with the loop if the current item is not "John Smith"
  continue;
}

此代码段完全相同但没有continue

// loop through the data array
for(var i = 0; i < data.length; i++) {
  // check if the current item is "John Smith"
  if(data[i].firstName == "John" && data[i].lastName == "Smith") {
    return data[i];
  }
}

这是您用来从阵列删除目标对象的循环:

// loop through the data array
for(var i = 0; i < data.length; i++) {
  // check if the current item is "John Smith"
  if(data[i].firstName == "John" && data[i].lastName == "Smith") {
    delete data[i];
    // you can also use Array.prototype.splice() to remove an item from an array:
    // data.splice(i, 1);
  }
  // continue with the loop if the current item is not "John Smith"
  continue;
}

此代码段完全相同但没有continue

// loop through the data array
for(var i = 0; i < data.length; i++) {
  // check if the current item is "John Smith"
  if(data[i].firstName == "John" && data[i].lastName == "Smith") {
    delete data[i];
    // you can also use Array.prototype.splice() to remove an item from an array:
    // data.splice(i, 1);
  }
}

如果您使用的是jQuery,请使用此代码段,而不是返回或删除任何可以处理该对象的内容,但您可以在jQuery回调函数中使用它。
在这种情况下,我将使用console.log();作为示例:

$.each(data, function(i, object) {
  if(object.firstName == "John" && object.lastName == "Smith") {
    console.log(object);
  }
});
祝你好运,一切顺利。

答案 2 :(得分:0)

Vanilla JS:

var findWhere = function(key,val,array) {
   var o;
   array.some(function(object) { return object[key] == val && (o = object); });
   return o;
};

var data = []; //your array
findWhere('id',1,data); //get the first object in the array where id = 1

修改

这是一个更好的实际上需要回调并且只能返回一个元素或所有匹配元素:

var find = function(arr,cb,all) {
    var o;
    if(all) {
        return arr.filter(cb);
    }

    arr.some(function(object) { return cb(object) && (o = object); });
    return o;
};

var findAll = function(arr,cb) { return find(arr,cb,true); };

//return the first object in the data array where the id = 1
find(data,function(object) { return object.id == 1 });

//return all objects in the data array where name = 'John'
findAll(data,function(object) { return object.firstName = 'John'; });