Given a JSON object like:
var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"}
]};
How can I do something like this:
datagood = data.where(value == 55)
Is something like that possible with JS/jQuery? Thanks
Given a JSON object like:
var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"}
]};
How can I do something like this:
datagood = data.where(value == 55)
Is something like that possible with JS/jQuery? Thanks
Share Improve this question asked Apr 15, 2011 at 5:39 AnApprenticeAnApprentice 111k201 gold badges636 silver badges1k bronze badges5 Answers
Reset to default 12jQuery's grep
function lets you filter through an array:
var datagood = $.grep(data.items, function (item) {
return item.value == 55;
});
If you want more powerful utilities, take a look at this SO question on JS LINQ libraries.
Alternatively, underscore.js is also useful for array/object manipulation.
jLinq? http://www.hugoware.net/Projects/jLinq
You can use Lo-Dash or Underscore libraries _.where() and _.find() functions:
var res1 = _.where(data.items,{value:"55"});
var res2 = _.find(data.items,{value:"55"});
The difference between these two functions that _.where() returns all matched records, and _.find() - only first record.
var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"},
{value: "55", name: "Another Rudy Hamilton"}
]};
var res1 = _.where(data.items,{value:"55"});
var res2 = _.find(data.items,{value:"55"});
document.write('-.where(): ',JSON.stringify(res1),'<br>');
document.write('-.find(): ',JSON.stringify(res2),'<br>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"}
]};
// using underscore.js http://documentcloud.github.com/underscore/
var t = _(data.items).find(function(x) {
return x.value == 55;
});
JSON.stringify(t) ; //# => {"value":"55","name":"Rudy Hamilton"}
// using pure javascript
var find = function(items, f) {
for (var i=0; i < items.length; i++) {
var item = items[i];
if (f(item)) return item;
};
}
t = find(data.items, function(x) {return x.value == "55";});
JSON.stringify(t) ; //# => {"value":"55","name":"Rudy Hamilton"}
Here is my one-liner solution for you:
let result = data.items.find(x => x.value == '55');
Full Example:
var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"}
]};
window.addEventListener('load', function() {
let result = data.items.find(x => x.value == '55');
console.log(result);
document.getElementById('person').innerHTML = result.name;
})
<div id="person"></div>