如何在只知道attr值的情况下找到对象的每个属性
How to find each property of object knowing only attr value
我有关联的数组:
[
{
"attr_1":"value 1_1",
"attr_2":"value 2_1",
"attr_3":"value 3_1"
},
{
"attr_1":"value 2_1",
"attr_2":"value 2_2",
"attr_3":"value 2_3"
},
{
"attr_1":"value 1_1",
"attr_2":"value 3_2",
"attr_3":"value 3_3"
}
]
例如,我需要通过请求"value 1_1"来获得完整的对象。请求后,我想看看对象1和对象3。我想我需要散列,但我不知道如何:(
我该如何正确地执行此操作?
这是Array.filter的完美案例!
yourArray.filter( function(elem) {
// Loop attr_1, attr_2, attr_3
for ( var i in elem ) {
if ( elem[i] == 'value 1_1' ) {
return true;
}
}
});
Array.filter在所有浏览器中都是原生的,但在IE8及以下版本中则不然。在这种情况下,你必须包括这个polyfill
/**
* Copyright (c) Mozilla Foundation http://www.mozilla.org/
* This code is available under the terms of the MIT License
*/
if (!Array.prototype.filter) {
Array.prototype.filter = function(fun /*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "function") {
throw new TypeError();
}
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this) {
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this)) {
res.push(val);
}
}
}
return res;
};
}
更多信息:http://www.diveintojavascript.com/core-javascript-reference/the-array-object/array-filter
使用下划线:
list = [
{
"attr_1":"value 1_1",
"attr_2":"value 2_1",
"attr_3":"value 3_1"
},
{
"attr_1":"value 2_1",
"attr_2":"value 2_2",
"attr_3":"value 2_3"
},
{
"attr_1":"value 1_1",
"attr_2":"value 3_2",
"attr_3":"value 3_3"
}
]
query = "value 1_1"
results = _(list).filter(function(elem) {
return _(_(elem).values()).include(query)
})
console.log(results)
与原始javascript相反,此实现考虑了所有细微的细节,如自有/非自有对象属性。
function search(arr, value) {
var ret = [];
for (var i=0, l=arr.length; i<l; i++) {
for (var k in arr[i]) {
if (arr[i][k] === value) ret.push(arr[i]);
}
}
return ret;
}
相关文章:
- 在不知道深度或父属性的情况下从对象中删除属性
- 如何在不使用Page.Theme属性的情况下设置页面样式和主题
- 在不使用lodash-get的情况下从json中提取深层属性
- Haxe Javascript:在不使用Reflect的情况下按名称获取和设置属性
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- AngularJs,在没有隔离的情况下将指令属性添加到作用域
- vue-js-单选按钮won't默认情况下使用v-model属性进行检查
- 如何在不使用css转换的情况下将jQuery animate与css3属性相结合
- Javascript:如何在不使用getElementById的情况下更改子元素的获取和更改属性
- 在没有特定属性的情况下使用jQuery.css()
- 如何在没有类属性的情况下使用Rangy.js创建标记
- 如何在不丢失属性的情况下更改元素标记
- 在IE中没有开发人员控制台的情况下,JavaScript无法运行(can't属性为缺少控制台)
- 角度单元测试:如何在没有范围的情况下测试控制器属性
- Kinetic.js / Javascript:在不使用 eval() 的情况下调用变量作为属性
- 默认情况下,一个模型属性等于 sail.js 模型中的另一个模型属性
- 如何在没有代码隐藏访问权限的情况下将自定义 HTML 属性添加到 ASP.NET 标签
- 为什么您可以在不引用“this”的情况下操作对象属性
- 在不使用原型的情况下向函数添加属性
- Rail对默认情况下隐藏在表单中的属性进行建模