Tìm đối tượng theo id trong một mảng các đối tượng JavaScript


1546

Tôi đã có một mảng:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]

Tôi không thể thay đổi cấu trúc của mảng. Tôi đang được thông qua một id của 45và tôi muốn lấy 'bar'đối tượng đó trong mảng.

Làm cách nào để làm điều này trong JavaScript hoặc sử dụng jQuery?

Câu trả lời:


1190

Sử dụng find()phương pháp:

myArray.find(x => x.id === '45').foo;

Từ MDN :

Các find()phương thức trả về giá trị đầu tiên trong mảng, nếu một phần tử trong mảng thoả mãn được cung cấp chức năng kiểm tra. Nếu không thì undefinedđược trả lại.


Nếu bạn muốn tìm chỉ mục của nó thay vào đó, hãy sử dụng findIndex():

myArray.findIndex(x => x.id === '45');

Từ MDN :

Các findIndex()phương thức trả về chỉ số của phần tử đầu tiên trong mảng đó đáp ứng các quy định chức năng kiểm tra. Nếu không -1 được trả về.


Nếu bạn muốn có được một mảng các phần tử phù hợp, hãy sử dụng filter()phương thức thay thế:

myArray.filter(x => x.id === '45');

Điều này sẽ trả về một mảng các đối tượng. Nếu bạn muốn có được một mảng các foothuộc tính, bạn có thể làm điều này với map()phương thức:

myArray.filter(x => x.id === '45').map(x => x.foo);

Lưu ý bên lề: các phương thức như find()hoặc filter(), và các hàm mũi tên không được hỗ trợ bởi các trình duyệt cũ hơn (như IE), vì vậy nếu bạn muốn hỗ trợ các trình duyệt này, bạn nên sao chép mã của mình bằng Babel (với polyfill ).


2
Do đó, đối với nhiều điều kiện thử nghiệm, nó sẽ giống như: myArray.find (x => x.id === '45' && x.color == 'red'). Foo
Apqu

2
Đối với tôi, câu trả lời tốt nhất cho đến nay. Không cần jQuery cũng không tạo các mảng phụ trợ mới.
Canta

myArray.find (x => x.id === '45') nó không hoạt động trên máy tính mac
Govinda Rajbhar

@TJCrowder Tôi không nghĩ rằng nên sao chép-dán các polyfill từ MDN vào mã của bạn; thay vào đó, bạn nên sử dụng các gói npm với polyfill. Và Babel không bao gồm các polyfill cho các tính năng ES2015 +, trong gói babel-polyfill .
Michał Perłakowski

2
myArray.find (x => x.id === '45'). foo; ném một ngoại lệ nếu không có đối tượng có id là '45'.
Frazer Kirkman

1466

Vì bạn đã sử dụng jQuery, bạn có thể sử dụng hàm grep dành cho tìm kiếm một mảng:

var result = $.grep(myArray, function(e){ return e.id == id; });

Kết quả là một mảng với các mục được tìm thấy. Nếu bạn biết rằng đối tượng luôn ở đó và nó chỉ xảy ra một lần, bạn chỉ có thể sử dụng result[0].foođể nhận giá trị. Nếu không, bạn nên kiểm tra độ dài của mảng kết quả. Thí dụ:

if (result.length === 0) {
  // no result found
} else if (result.length === 1) {
  // property found, access the foo property using result[0].foo
} else {
  // multiple items found
}

124
Sẽ an toàn hơn khi sử dụng ===thay vì ==, để tránh các sự cố kỳ lạ với ==toán tử JavaScript .
Vicky Chijwani

11
@VickyChijwani: Có bất kỳ vấn đề nào khi so sánh một chuỗi với một chuỗi không?
Guffa

38
Chà, nếu bạn hoàn toàn chắc chắn rằng cả hai e.ididsẽ là chuỗi, tôi cho rằng nó ổn để sử dụng ==. Nhưng nếu bạn không chắc chắn, bạn có thể phải đối mặt với vấn đề (vì '' == 0truenhưng '' === 0false). Chưa kể ===dường như nhanh hơn ( stackoverflow.com/questions/359494/ mài ).
Vicky Chijwani

101
Về cơ bản tôi luôn sử dụng ===vì nó hoạt động chính xác như ==trong các ngôn ngữ lập trình khác. Tôi coi ==là không tồn tại trong JavaScript.
Vicky Chijwani

6
@de. Nhiều câu trả lời ở đây cung cấp hành vi dự định khi tìm kiếm các giá trị duy nhất; về cơ bản bạn có thể nhận ra chúng bằng cách chúng sớm quay trở lại hoặc thoát khỏi vòng lặp của chúng (hoặc hướng dẫn một cấu trúc cấp thấp hơn để dừng lặp lại). Xem câu trả lời của JaredPar cho một ví dụ kinh điển, và nhận xét của Aaronius về câu trả lời đó cho cùng một cái nhìn sâu sắc. Nói chung, mọi người phân biệt giữa các chức năng "bộ lọc" và "tìm" theo cách này, nhưng thuật ngữ khác nhau. Mặc dù hiệu quả hơn, đây vẫn là một tìm kiếm tuyến tính, vì vậy nếu bạn muốn sử dụng bảng băm, hãy xem câu trả lời của Aaron Digulla (hãy cẩn thận với các chi tiết của impl.).
tne

362

Một giải pháp khác là tạo một đối tượng tra cứu:

var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
    lookup[array[i].id] = array[i];
}

... now you can use lookup[id]...

Điều này đặc biệt thú vị nếu bạn cần làm nhiều tra cứu.

Điều này sẽ không cần nhiều bộ nhớ hơn vì ID và đối tượng sẽ được chia sẻ.


6
Chính xác những gì tôi đang tìm kiếm. Thật buồn cười là tôi đã cố gắng làm phức tạp nó bằng cách cố gắng lặp đi lặp lại mỗi lần, xóa từng mục khỏi danh sách khi tôi tìm thấy nó khi tôi chỉ cần thay đổi dữ liệu nhận được từ CouchDB và chuyển nó thành định dạng hữu ích cho tôi nhu cầu. +1 thưa ngài!
slickplaid

5
cái này thông minh Tôi không thể tưởng tượng làm thế nào những người khác bị thuyết phục bằng cách tìm kiếm trên tất cả các mảng cho mỗi lần sử dụng.
Aladdin Mhemed

4
Miễn là bạn không dựa vào thứ tự của các thuộc tính: stackoverflow.com/questions/4886314/iêu
Marle1

Đang sử dụng nghỉ ngơi; trong vòng lặp một tùy chọn / cải tiến tốt nếu bạn biết chỉ có một đối tượng để tìm?
irJvV

7
@irJvV: Không, điều đó không có ý nghĩa gì cả. Đoạn mã trên rất hữu ích nếu bạn cần thực hiện nhiều tra cứu. Nếu bạn chỉ nhìn một lần, thì việc tạo một lookupđối tượng là một sự lãng phí thời gian.
Aaron Digulla

174

ECMAScript 2015 cung cấp phương thức find () trên mảng:

var myArray = [
 {id:1, name:"bob"},
 {id:2, name:"dan"},
 {id:3, name:"barb"},
]

// grab the Array item which matchs the id "2"
var item = myArray.find(item => item.id === 2);

// print
console.log(item.name);

Nó hoạt động mà không cần thư viện bên ngoài. Nhưng nếu bạn muốn hỗ trợ trình duyệt cũ hơn, bạn có thể muốn bao gồm polyfill này .


1
Có lẽ vì nó vẫn có vẻ rất thử nghiệm và không có nhiều trình duyệt hỗ trợ nó, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
trộm

2
Điều này có thể được đơn giản hóa để myArray.find(d=>d.id===45).foo;.
Shaggy

1
@Shaggy hoặc thậm chí myArray.find(({ id }) => id === 45).foo. Nhưng đây là một câu trả lời cũ đã được viết trước khi cú pháp ES2015 được hỗ trợ tốt như bây giờ. Câu trả lời của @ Gothdo hiện là cập nhật nhất trong chuỗi.
Rúnar Berg

1
@Shaggy nếu .find () trả về không xác định, thì tối ưu hóa của bạn sẽ gây ra lỗi. Vì vậy, giải pháp này chỉ có thể được sử dụng trong trường hợp trận đấu được đảm bảo.
Herbert Peters

1
@HerbertPeter Nếu bạn muốn chắc chắn rằng bạn có thể kiểm tra null, điều này sẽ thực sự dễ dàng với chuỗi tùy chọn : myArray.find(d => d.id === 45)?.foo.
Rúnar Berg

141

Underscore.js có một phương thức hay cho việc đó:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'},etc.]
obj = _.find(myArray, function(obj) { return obj.id == '45' })

42
Đối với bản ghi, Lo-Dash (thường có hiệu suất cao hơn Underscore) có một phương pháp tương tự. Tài liệu ở đây: lodash.com/docs#find
user456584

Nếu bạn chỉ mong đợi một đối tượng, thì sử dụng findWhere sẽ hiệu quả hơn vì sau khi tìm thấy một kết quả, tìm kiếm sẽ không tiến xa hơn.
Trước

@Foreever Từ các tài liệu của _.find: "Hàm trả về ngay khi tìm thấy phần tử có thể chấp nhận và không đi qua toàn bộ danh sách."
GijsjanB

129

Tôi nghĩ cách dễ nhất sẽ là như sau, nhưng nó sẽ không hoạt động trên Internet Explorer 8 (hoặc sớm hơn):

var result = myArray.filter(function(v) {
    return v.id === '45'; // Filter out the appropriate one
})[0].foo; // Get result and access the foo property

Tôi tò mò, có bất kỳ lợi thế hiệu suất ở đây so với thông thường for?
Igor Zinov'yev

@Igor Zinov'yev: Vâng, chắc chắn có những tác động hiệu suất với các công cụ mảng ES5 đó. Một hàm riêng biệt được thực thi cho từng phần tử, vì vậy nó sẽ không thực sự nhanh so với forvòng lặp trực tiếp .
pimvdb

Vì vậy, bạn đang nói rằng nó sẽ chậm hơn? Ngoài ra, nó sẽ luôn quét toàn bộ mảng, theo như tôi có thể thấy, trong khi forvòng lặp sẽ chấm dứt ở trận đấu đầu tiên.
Igor Zinov'yev

Nếu bạn cần hỗ trợ cho IE8, chỉ cần bỏ cái này vào: stackoverflow.com/questions/7153470/iêu
Adam Grant

Mã này sẽ gây ra lỗi nếu không có yếu tố nào với điều đóid
Stan

71

Hãy thử như sau

function findById(source, id) {
  for (var i = 0; i < source.length; i++) {
    if (source[i].id === id) {
      return source[i];
    }
  }
  throw "Couldn't find object with id: " + id;
}

17
Điều này không xứng đáng với câu trả lời của riêng nó, nhưng trong các trình duyệt hiện đại, giải pháp này có thể được viết là: jsfiddle.net/rwaldron/j3vST
Rick

12
Nếu bạn đang tìm kiếm hiệu quả, hãy lưu ý rằng ví dụ này có thể nhanh hơn so với sử dụng bộ lọc () (xem ví dụ của Rick) vì cái này trả về một khi nó tìm thấy mục phù hợp đầu tiên trong khi bộ lọc () tiếp tục chạy qua toàn bộ mảng ngay cả sau khi tìm thấy trận đấu. Cái này cũng không có chi phí tạo mảng bổ sung hoặc gọi hàm cho mỗi mục.
Aaronius

3
@Rick, điều thú vị nhất về câu trả lời đó là rõ ràng bạn có thể thêm bảng điều khiển firebird vào cửa sổ đầu ra trong jsFiddle. Điều này tốt hơn nhiều so với việc đăng nhập và bảo người khác mở giao diện điều khiển để xem đầu ra. Tuyệt vời!
KyleMit

1
Vì cho đến nay chưa có ai đề cập đến nó, tôi muốn thêm rằng AngularJS cũng có một phương thức lọc .
Eno



31

Một phiên bản chung và linh hoạt hơn của hàm findById ở trên:

// array = [{key:value},{key:value}]
function objectFindByKey(array, key, value) {
    for (var i = 0; i < array.length; i++) {
        if (array[i][key] === value) {
            return array[i];
        }
    }
    return null;
}

var array = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];
var result_obj = objectFindByKey(array, 'id', '45');

15

Bạn có thể dễ dàng nhận được điều này bằng cách sử dụng hàm map () :

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];

var found = $.map(myArray, function(val) {
    return val.id == 45 ? val.foo : null;
});

//found[0] == "bar";

Ví dụ hoạt động: http://jsfiddle.net/hunter/Pxaua/


1
Tôi quên mất thực tế là jQuery maptự động loại bỏ nullcác phần tử. Nghe có vẻ sai lệch đối với tôi và với khái niệm chung map, vì kết quả không cùng độ dài của bộ sưu tập ban đầu.
MaxArt

14

Bạn có thể sử dụng các bộ lọc,

  function getById(id, myArray) {
    return myArray.filter(function(obj) {
      if(obj.id == id) {
        return obj 
      }
    })[0]
  }

get_my_obj = getById(73, myArray);

1
@TobiasBeuving - Công cụ sử dụng Array.find () cũng là JS đơn giản và nên dừng lại ở lần tìm đầu tiên để có hiệu quả hơn.
Adrian Lynch

12

Mặc dù có nhiều câu trả lời đúng ở đây, nhiều trong số chúng không đề cập đến thực tế rằng đây là một hoạt động tốn kém không cần thiết nếu được thực hiện nhiều lần. Trong một trường hợp cực đoan, điều này có thể là nguyên nhân của các vấn đề hiệu suất thực sự.

Trong thế giới thực, nếu bạn đang xử lý nhiều vật phẩm và hiệu suất là một mối lo ngại thì ban đầu sẽ nhanh hơn nhiều để xây dựng một tra cứu:

var items = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];

var lookup = items.reduce((o,i)=>o[i.id]=o,{});

sau đó bạn có thể nhận được tại các mục trong thời gian cố định như thế này:

var bar = o[id];

Bạn cũng có thể xem xét sử dụng Bản đồ thay vì một đối tượng như tra cứu: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map


11

Sử dụng bản địa Array.reduce

var array = [ {'id':'73' ,'foo':'bar'} , {'id':'45' ,'foo':'bar'} , ];
var id = 73;
var found = array.reduce(function(a, b){
    return (a.id==id && a) || (b.id == id && b)
});

trả về phần tử đối tượng nếu tìm thấy, nếu không false


Chỉ cần một lưu ý, Array.reduce không được hỗ trợ trong IE8 trở xuống.
Burn_E99

7

Nếu bạn làm điều này nhiều lần, bạn có thể thiết lập Bản đồ (ES6):

const map = new Map( myArray.map(el => [el.id, el]) );

Sau đó, bạn có thể chỉ cần làm:

map.get(27).foo

6

Đây là cách tôi tìm hiểu về JavaScript thuần túy, theo cách tối thiểu nhất tôi có thể nghĩ về nó hoạt động trong ECMAScript 3 trở lên. Nó trở lại ngay sau khi một trận đấu được tìm thấy.

var getKeyValueById = function(array, key, id) {
    var testArray = array.slice(), test;
    while(test = testArray.pop()) {
        if (test.id === id) {
            return test[key];
        }
    }
    // return undefined if no matching id is found in array
    return;
}

var myArray = [{'id':'73', 'foo':'bar'}, {'id':'45', 'foo':'bar'}]
var result = getKeyValueById(myArray, 'foo', '45');

// result is 'bar', obtained from object with id of '45'

5

Chung chung và ngắn gọn hơn

function findFromArray(array,key,value) {
        return array.filter(function (element) {
            return element[key] == value;
        }).shift();
}

trong trường hợp của bạn var element = findFromArray(myArray,'id',45)Điều đó sẽ cung cấp cho bạn toàn bộ yếu tố.


4

Bạn có thể dùng thử Sugarjs từ http://sugarjs.com/ .

Nó có một phương pháp rất ngọt ngào trên Mảng , .find. Vì vậy, bạn có thể tìm thấy một yếu tố như thế này:

array.find( {id: 75} );

Bạn cũng có thể truyền một đối tượng có nhiều thuộc tính cho nó để thêm "mệnh đề where" khác.

Lưu ý rằng Sugarjs mở rộng các đối tượng bản địa và một số người cho rằng điều này rất xấu xa ...


2
Chà, thật xấu xa, vì có thể xảy ra rằng các phiên bản EcmaScript mới có thể giới thiệu các phương thức mới có cùng tên. Và đoán xem, đây chính xácfindnhững gì đã xảy ra . Đề nghị của tôi là nếu bạn muốn mở rộng các nguyên mẫu bản địa, hãy luôn sử dụng các tên cụ thể hơn, để lại các tên đơn giản nhất cho các phát triển tiêu chuẩn trong tương lai.
MaxArt

Nhận xét này đã gần 2 tuổi và hôm nay tôi thà sử dụng lodash anyways. Tuy nhiên nếu bạn muốn bạn có thể đọc về chủ đề này trên trang web sugarjs. Họ có quan điểm tốt với ý kiến ​​của bạn: sugarjs.com/native
deepflame

1
Các op đã đặc biệt yêu cầu một giải pháp javascript hoặc jquery
Tobias Beuving 22/2/2015

4

Dựa trên câu trả lời được chấp nhận:

jQuery:

var foo = $.grep(myArray, function(e){ return e.id === foo_id})
myArray.pop(foo)

Hoặc CoffeeScript:

foo = $.grep myArray, (e) -> e.id == foo_id
myArray.pop foo

4

Gần đây, tôi phải đối mặt với điều tương tự mà tôi cần tìm kiếm chuỗi từ một mảng lớn.

Sau một số tìm kiếm tôi thấy Sẽ dễ dàng xử lý với mã đơn giản:

Mã số:

var items = mydata.filter(function(item){
    return item.word.toLowerCase().startsWith( 'gk );
})

Xem https://jsfiddle.net/maheshwaghmare/cfx3p40v/4/

Serach từ chuỗi 20k


3

Lặp lại bất kỳ mục nào trong mảng. Đối với mỗi mục bạn truy cập, hãy kiểm tra id của mục đó. Nếu đó là một trận đấu, trả lại nó.

Nếu bạn chỉ muốn tz codez:

function getId(array, id) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (array[i].id === id) {
            return array[i];
        }
    }
    return null; // Nothing found
}

Và điều tương tự khi sử dụng các phương thức Array của ECMAScript 5:

function getId(array, id) {
    var obj = array.filter(function (val) {
        return val.id === id;
    });

    // Filter returns an array, and we just want the matching item.
    return obj[0];
}

3

Miễn là trình duyệt hỗ trợ ECMA-262 , phiên bản thứ 5 (tháng 12 năm 2009), điều này sẽ hoạt động, gần như một lớp lót:

var bFound = myArray.some(function (obj) {
    return obj.id === 45;
});

2
Hầu hết. bFoundchỉ là một boolean là truemột phần tử thỏa mãn điều kiện cần thiết.
MaxArt

3

Bạn có thể làm điều này ngay cả trong JavaScript thuần bằng cách sử dụng hàm "bộ lọc" tích hợp cho các mảng:

Array.prototype.filterObjects = function(key, value) {
    return this.filter(function(x) { return x[key] === value; })
}

Vì vậy, bây giờ chỉ cần chuyển "id" thay cho keyvà "45" thay cho value, và bạn sẽ có được đối tượng đầy đủ khớp với id là 45. Vì vậy, đó sẽ là,

myArr.filterObjects("id", "45");

16
Đừng sửa đổi các đối tượng bạn không sở hữu.
Michał Perłakowski 14/2/2016

3

Sử dụng Array.prototype.filter() chức năng.

DEMO : https://jsfiddle.net/sumitridhal/r0cz0w5o/4/

JSON

var jsonObj =[
 {
  "name": "Me",
  "info": {
   "age": "15",
   "favColor": "Green",
   "pets": true
  }
 },
 {
  "name": "Alex",
  "info": {
   "age": "16",
   "favColor": "orange",
   "pets": false
  }
 },
{
  "name": "Kyle",
  "info": {
   "age": "15",
   "favColor": "Blue",
   "pets": false
  }
 }
];

LỌC

var getPerson = function(name){
    return jsonObj.filter(function(obj) {
      return obj.name === name;
    });
}

Làm thế nào tôi có thể tìm kiếm trong đối tượng lồng nhau? Giống như thú cưng = sai nên trả lại hai đối tượng.
Valay

sử dụng .filterphương pháp trên obj.infotrong vòng lặp lồng nhau. var getPerson = function(name){ return jsonObj.filter(function(obj) { return obj.info.filter(function(info) { return pets === false; }); }); }
Sumit Ridhal

bạn có thể sử dụng kiểu es6 quá imo ... const filterData = jsonObj.filter (obj => obj.name === 'Alex')
DagicCross

3

Chúng ta có thể sử dụng các phương thức Jquery $.each()/$.grep()

var data= [];
$.each(array,function(i){if(n !== 5 && i > 4){data.push(item)}}

hoặc là

var data = $.grep(array, function( n, i ) {
  return ( n !== 5 && i > 4 );
});

sử dụng cú pháp ES6:

Array.find, Array.filter, Array.forEach, Array.map

Hoặc sử dụng Lodash https://lodash.com/docs/4.17.10#filter , Underscore https://underscorejs.org/#filter


2

Tôi thực sự thích câu trả lời do Aaron Digulla cung cấp nhưng cần phải giữ mảng đồ vật của tôi để tôi có thể lặp lại qua nó sau. Vì vậy, tôi đã sửa đổi nó thành

	var indexer = {};
	for (var i = 0; i < array.length; i++) {
	    indexer[array[i].id] = parseInt(i);
	}
	
	//Then you can access object properties in your array using 
	array[indexer[id]].property


Sử dụng giải pháp tương tự như nhanh nhất để tìm các mục trong mảng. Nhưng parseInt là dư thừa ở đây.
aleha

1

Sử dụng:

var retObj ={};
$.each(ArrayOfObjects, function (index, obj) {

        if (obj.id === '5') { // id.toString() if it is int

            retObj = obj;
            return false;
        }
    });
return retObj;

Nó sẽ trả về một đối tượng bằng id.


bạn có thể rút ngắn mã của mình bằng cách sử dụng return obj.id === 5? obj: sai; Tôi sử dụng $ .each rất nhiều để lặp lại trên các mảng.
marcel

@marcel: Điều đó sẽ không hiệu quả. Khi trả về false sẽ kết thúc vòng lặp, nó sẽ chỉ tìm thấy đối tượng nếu đó là mục đầu tiên trong mảng.
Guffa

1

Giải pháp này cũng có thể hữu ích:

Array.prototype.grep = function (key, value) {
    var that = this, ret = [];
    this.forEach(function (elem, index) {
        if (elem[key] === value) {
            ret.push(that[index]);
        }
    });
    return ret.length < 2 ? ret[0] : ret;
};
var bar = myArray.grep("id","45");

Tôi đã làm cho nó giống như $.grepvà nếu một đối tượng được tìm ra, hàm sẽ trả về đối tượng, thay vì một mảng.


2
Đừng sửa đổi các đối tượng bạn không sở hữu.
Michał Perłakowski 14/2/2016

@Gothdo Tôi đồng ý. Nếu ai đó không biết function will return the object, rather than an arraycó thể mắc lỗi, nhưng tôi nghĩ nó phụ thuộc vào người dùng.
soytian

0

Bắt đầu từ câu trả lời của aggaton , đây là một hàm thực sự trả về phần tử mong muốn (hoặc nullnếu không tìm thấy), được cung cấp arrayvà một callbackhàm trả về giá trị trung thực cho phần tử "chính xác":

function findElement(array, callback) {
    var elem;
    return array.some(function(e) {
        if (callback(e)) {
            elem = e;
            return true;
        }
    }) ? elem : null;
});

Chỉ cần nhớ rằng điều này không thực sự hoạt động trên IE8-, vì nó không hỗ trợ some. Một polyfill có thể được cung cấp, thay vào đó luôn có forvòng lặp cổ điển :

function findElement(array, callback) {
    for (var i = 0; i < array.length; i++)
        if (callback(array[i])) return array[i];
    return null;
});

Nó thực sự nhanh hơn và gọn hơn. Nhưng nếu bạn không muốn phát minh lại bánh xe, tôi khuyên bạn nên sử dụng một thư viện tiện ích như gạch dưới hoặc lodash.


0

Ngắn nhất

var theAnswerObj = _.findWhere(array, {id : 42});

1
Điều này đòi hỏi phải sử dụng thư viện gạch dưới, OP đã yêu cầu một giải pháp javascript hoặc jQuery đơn giản
Tobias Beuving

2
một khi bạn bao gồm gạch dưới, đây không phải là một câu trả lời ngắn!
Tim Ogilvy

-1

Coi "axesOptions" là mảng các đối tượng có định dạng đối tượng là {: field_type => 2 ,: field => [1,3,4]}

function getFieldOptions(axesOptions,choice){
  var fields=[]
  axesOptions.each(function(item){
    if(item.field_type == choice)
        fields= hashToArray(item.fields)
  });
  return fields;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.