我正在使用Ionic
混合应用,但我在Javascript
/ AngularJS
中很新。
我有这个数据结构:
var objects= [
{
name: "o1",
company: {
id:2,
fields: [1,6]
}
},
{
name: "o2",
company: {
id:2,
fields: [3,4,5]
}
}
];
var selectedFields= [
{
id: 1,
name: "f1",
},
{
id: 2,
name: "f2",
}
];
我想过滤包含与objects array
中包含的元素对应的ID的company.fields
元素(在属性selectedFields array
中)。
例如,在这种情况下,我们有2个元素,o1
和o2
。 o1
包含fields
1
和6
,o2
包含fields
3
,4
和{ {1}}。
5
包含selectedFields array
fields
ids
和1
,因此在这种情况下,已过滤的2
应为对象object
}。
这就是我的尝试:
o1
但它说var filteredObjects = filterFilter(objects, selectedFields,function(o, sf){
return angular.forEach(o.company.fields, function (field) {
return field.id == sf.is;
});
});
。
和:
o is undefined
但var result = [];
angular.forEach(objects, function(o){
angular.forEach(o.company.fields, function(f){
angular.forEach(selectedFields, function(sf){
if(sf.id == f.id) {
result.push(o);
}
});
});
});
永远不会condition if(sf.id == f.id)
。
有什么想法吗?感谢
答案 0 :(得分:3)
试试这个:
var test = objects.filter(function (o) {
return selectedFields.some(function (i) {
/*
Some will return true if any of the elements return true
*/
return i.id === o.company.id;
});
});
基本上是过滤Object数组。 .Filter()
如果其回调返回true,将使用旧元素创建一个新数组。如果任何任何回调返回true,.some()
将执行的操作将返回true。
如果id匹配,.some()
返回true,将其传递给.filter()
告诉过滤器将该元素添加到新数组中。
.some()
是有效的,因为它会在找到匹配结果时停止迭代,回调返回true。虽然.forEach()
会继续,但不会返回值。
部分文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
非常有用的数组方法列表:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Methods_2
编辑:我误解了你的问题抱歉。var test = objects.filter(function (o) {
return selectedFields.some(function (i) {
/*
Some will return true if any of the elements return true
*/
return o.company.fields.indexOf(i.id) !== -1; //i.id === o.company.id;
});
});
我修改了小提琴:http://jsfiddle.net/08tvmdyh/1/
答案 1 :(得分:1)
试试这个:
var filteredObjects = objects.filter(function(o){
var fields = o.company.fields,
matched = false;
selectedFields.forEach(function(field){
if(fields.indexOf(field.id) != -1){
matched = true;
}
});
return matched;
});
首先尝试理解Javascript中构建的以下3个本机数组函数:
Array.prototype.filter;
Array.prototype.forEach;
Array.prototype.indexOf;