从javascript对象中过滤结果
filter results out of a javascript object
我确信javascript或jquery中内置了某种过滤功能,但我似乎不知道如何使用jquery filter()
是否有一种方法来过滤所有的元素从一个javascript对象有一个特定的值,并得到返回的对象?
我所追求的功能是这样的,虽然它不是很长,但我只是想知道是否有更简单的东西。
谢谢!
(function(){
var obj = {
a: true,
b: true,
c: false,
d: true,
e: true
},
f = [],
true_obj = {};
for (var i in obj){
if (obj[i] === true){
f.push(i);
}
}
for (var c = 0; c < f.length; c++){
true_obj[c] = f[c];
}
console.log(true_obj);
}());
JSBIN
如何使用jQuery的内置map
方法?http://api.jquery.com/jQuery.map/
(function(){
var obj = {
a: true,
b: true,
c: false,
d: true,
e: true
},
f,
true_obj = {};
f = $.map(obj, function (val, key) {
return (val === true) ? key : null;
});
for (var c = 0; c < f.length; c++){
true_obj[c] = f[c];
}
console.log(true_obj);
}());
http://jsfiddle.net/gVZVL/如果值不是null
/undefined
,则在map
回调中计算的值将被添加到结果数组中。
此外,如果您希望将f
数组复制到true_obj
,只需使用slice
(而不是您的for
循环)- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice:
true_obj = f.slice(0);
http://jsfiddle.net/gVZVL/1/更新:
如果你只是想在Object
中过滤项目,试试这个:
for (var key in obj) {
if (obj[key] !== true) {
delete obj[key];
}
}
如果你想复制它(也保留原来的Object
),你可以使用:
var final_obj = {};
for (var key in obj) {
if (obj[key] === true) {
final_obj[key] = obj[key];
}
}
如果你以:
开头var obj = {
a: true,
b: true,
c: false,
d: true,
e: true
};
你会得到
{
a: true,
b: true,
d: true,
e: true
}
(覆盖或复制)
最好避免扩展原型。我的解决方案是:
我创建了一个obj对象的过滤方法,它使用HasOwnProperty()来检查属性是否直接指向对象,或者它是否来自原型链。
(function(){
var obj = {
a: true,
b: true,
c: false,
d: true,
e: true
},
true_obj = {};
obj.filter = function (value) {
var result = [];
for (var key in this) {
if (this.hasOwnProperty(key)) {
if (this[key] === value){
result.push(key);
}
}
}
return result;
};
var f = obj.filter(true);
for (var c = 0; c < f.length; c++){
true_obj[c] = f[c];
}
console.log(true_obj);
}());
这是一个JSBIN
function filterObject(object, predicate) {
var result = {};
for(var prop in object) {
if(predicate(object[prop])) {
result[prop] = object[prop];
}
}
return result;
}
(function(){
var obj = {
a: true,
b: true,
c: false,
d: true,
e: true
};
var true_obj = filterObject(obj, function(item) {
return item === true;
});
console.log(true_obj);
}());
您可以简单地扩展JavaScript中Object
对象的原型以包含这样的函数。
我不确定你到底想要什么样的filter
函数,但这里有一个例子:
Object.prototype.filter = function(val){
for (var e in this) {
if (this[e] === val) delete this[e];
}
}
// Object.defineProperty(Object.prototype, "filter", { value:Object.prototype.filter, enumerable:false }); // this line will make the new method not enumerable, see discussion with Ian
// Example:
var obj = {a:"1", b:"2", c:"1"};
obj.filter("1");
alert(obj.a); // undefined
相关文章:
- 如何在BookshelfJS中通过加入来过滤结果
- AEM/CQ应用程序:基于过滤结果的PDF生成器
- 如何根据角度中的复选框选择过滤结果
- Jquery 从选择选择的插件过滤结果
- 如何使用 backbone.localStorage 获取过滤结果
- 如何使用jquery从数据表中单击按钮时选择过滤结果
- 过滤结果以显示与ng匹配的结果显示angular js
- 仅为instagram视频过滤结果-instafeed.js
- 如何防止通过Twitter Bootstrap'过滤结果;s打字机
- 谷歌地图-基于JavaScript对象过滤结果
- AngularJS:过滤数组并访问被过滤结果中的嵌套数组
- 如何在Angular中使用复选框来过滤结果
- Symfony2过滤结果- ajax请求的问题
- 如何从 javascript 中的数组对象获取过滤结果
- 无法在控制器上访问ngRepeat的过滤结果
- JavaScript | AngularJS:根据日期过滤结果过滤项目
- 带过滤结果的Angular ng-if
- 基于IS AngularJS过滤结果
- 如何在angularjs中基于ID过滤结果
- 从javascript对象中过滤结果