gpt4 book ai didi

javascript - AngularJS 通过另一个数组过滤数组

转载 作者:行者123 更新时间:2023-11-30 09:57:37 26 4
gpt4 key购买 nike

我正在研究 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包含与 company.fields 中包含的元素相对应的 ID(在属性 selectedFields array 中)的元素.

例如,在本例中,我们有 2 个元素,o1o2 . o1包含 fields 16 , 和 o2包含 fields 3 , 45 .selectedFields array包含 fieldsids 12 , 所以在这种情况下过滤 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)永远不会 true .

有什么想法吗?谢谢

最佳答案

试试这个:

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;
});
});

本质上是过滤对象数组。 .Filter() 将在其回调返回 true 时创建一个包含旧数组元素的新数组。 .some() 将做的是,如果它的任何回调返回 true,则返回 true。

所以 .some() 如果 id 匹配则返回 true,它被传递到 .filter() 告诉过滤器将该元素添加到新数组。

.some() 是高效的,因为它会在找到匹配结果时停止迭代,回调返回 true。而 .forEach() 将继续运行并且不会返回值。

http://jsfiddle.net/08tvmdyh/

一些文档: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;
});
});

我修改了 fiddle :http://jsfiddle.net/08tvmdyh/1/

关于javascript - AngularJS 通过另一个数组过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com