假设我有一个包含四个对象的数组:
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
有没有办法可以{a: 5, b: 6}
通过属性的值获取第三个对象()b
,例如没有for...in
循环?
假设我有一个包含四个对象的数组:
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
有没有办法可以{a: 5, b: 6}
通过属性的值获取第三个对象()b
,例如没有for...in
循环?
Filter
属性与值匹配的对象数组,返回数组:
var result = jsObjects.filter(obj => {
return obj.b === 6
})
请参阅有关 Array.prototype.filter()的MDN 文档
Find
数组中第一个元素/对象的值,否则undefined
返回。
var result = jsObjects.find(obj => {
return obj.b === 6
})
我不知道您为什么反对 for 循环(大概您的意思是 a for loop
,而不是专门的for..in
),它们快速且易于阅读。无论如何,这里有一些选择。
For循环:
function getByValue(arr, value) {
for (var i=0, iLen=arr.length; i<iLen; i++) {
if (arr[i].b == value) return arr[i];
}
}
。筛选
function getByValue2(arr, value) {
var result = arr.filter(function(o){return o.b == value;} );
return result? result[0] : null; // or undefined
}
.forEach
function getByValue3(arr, value) {
var result = [];
arr.forEach(function(o){if (o.b == value) result.push(o);} );
return result? result[0] : null; // or undefined
}
另一方面,如果您确实是指 for..in 并且想要查找具有值为 6 的任何属性的对象,那么您必须使用 for..in 除非您通过名称进行检查。
例子
function getByValue4(arr, value) {
var o;
for (var i=0, iLen=arr.length; i<iLen; i++) {
o = arr[i];
for (var p in o) {
if (o.hasOwnProperty(p) && o[p] == value) {
return o;
}
}
}
}
尝试滤镜阵列用于过滤的方法array of objects
有property
。
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
使用数组过滤方法:
var filterObj = jsObjects.filter(function(e) {
return e.b == 6;
});
使用 for 循环:
for (var i in jsObjects) {
if (jsObjects[i].b == 6) {
console.log(jsObjects[i]); // {a: 5, b: 6}
}
}
工作小提琴: https : //jsfiddle.net/uq9n9g77/
好的,有几种方法可以做到这一点,但让我们从最简单和最新的方法开始,这个函数被称为find()
。
使用时要小心find
,因为即使 IE11 也不支持它,因此需要对其进行编译...
所以你有这个对象,正如你所说:
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
你可以编写一个函数并像这样得到它:
function filterValue(obj, key, value) {
return obj.find(function(v){ return v[key] === value});
}
并使用这样的功能:
filterValue(jsObjects, "b", 6); //{a: 5, b: 6}
同样在ES6中甚至缩短版本:
const filterValue = (obj, key, value)=> obj.find(v => v[key] === value);
此方法只返回匹配的第一个值...,为了更好的结果和浏览器支持,您可以使用filter
:
const filterValue = (obj, key, value)=> obj.filter(v => v[key] === value);
我们会回来[{a: 5, b: 6}]
...
此方法将返回一个数组而不是...
您也可以简单地使用 for 循环,创建一个这样的函数:
function filteredArray(arr, key, value) {
const newArray = [];
for(i=0, l=arr.length; i<l; i++) {
if(arr[i][key] === value) {
newArray.push(arr[i]);
}
}
return newArray;
}
并这样称呼它:
filteredArray(jsObjects, "b", 6); //[{a: 5, b: 6}]