从 2 个数组进行排序/过滤
Sorting/Filtering from 2 arrays
我有这两个数组:
var masterArray = [
{'id' : '1', 'title' : 'Title 1'},
{'id' : '2', 'title' : 'Title 2'},
{'id' : '3', 'title' : 'Title 3'},
{'id' : '4', 'title' : 'Title 4'},
{'id' : '5', 'title' : 'Title 5'},
{'id' : '6', 'title' : 'Title 6'},
{'id' : '7', 'title' : 'Title 7'}
];
var sortFilterInfo = [
{'id' : '6', 'sortOrder' : 1},
{'id' : '2', 'sortOrder' : 2},
{'id' : '7', 'sortOrder' : 3}
]
有了这些信息,我需要一个数组来给我这个排序的过滤数组:(我只使用本机 DOM 数组方法 (ES6)(map/filter/sort),而不是 Jquery、lodash 等。
var resultArray = [
{'id' : '6', 'title' : 'Title 6'},
{'id' : '2', 'title' : 'Title 2'},
{'id' : '7', 'title' : 'Title 7'}
]
谢谢!
这行得通吗?(编辑:如果你想让我解释它的作用,请发表评论)
// Create arrays
var masterArray = [
{'id' : '1', 'title' : 'Title 1'},
{'id' : '2', 'title' : 'Title 2'},
{'id' : '3', 'title' : 'Title 3'},
{'id' : '4', 'title' : 'Title 4'},
{'id' : '5', 'title' : 'Title 5'},
{'id' : '6', 'title' : 'Title 6'},
{'id' : '7', 'title' : 'Title 7'}
];
var sortFilterInfo = [
{'id' : '6', 'sortOrder' : 1},
{'id' : '2', 'sortOrder' : 2},
{'id' : '7', 'sortOrder' : 3}
]
var resultArray = new Array();
// Sort arrays
masterArray.sort(function(a, b){return parseInt(a.id)-parseInt(b.id)});
sortFilterInfo.sort(function(a, b){return a.sortOrder-b.sortOrder});
// Push to array the id of the filter...
for (var i in sortFilterInfo) {
resultArray.push(masterArray[parseInt(sortFilterInfo[i].id)-1]);
}
// console.log(resultArray);
//
// resultArray = [
// {'id' : '6', 'title' : 'Title 6'},
// {'id' : '2', 'title' : 'Title 2'},
// {'id' : '7', 'title' : 'Title 7'}
// ]
您只需遍历sortFilterInfo
数组,然后从主数组中获取项目即可。
下面是一个示例:
function myFunc(master, sortOrder) {
var result = [];
// Sort sortOrder so it is ordered correctly
// The array is cloned so it does not affect
// the original array
var order = sortOrder.concat().sort(function (a, b) {
return a.sortOrder - b.sortOrder;
});
// Function to find an item in the master array
var find = function (value) {
var result = -1;
master.some(function (item, index) {
if (item.id == value) {
result = index;
return true;
}
});
return result;
};
// Go through the orderings and pick the items
// from the master array
order.forEach(function (item) {
var index = find(item.id);
if (index !== -1) {
result.push(master[index]);
}
});
return result;
}
var result = myFunc(masterArray, sortFilterInfo);
相关文章:
- 当我想对redux容器中的数据进行排序或过滤时,我该如何查看它的状态
- AngularJS:使用orderBy进行过滤和排序
- Kendo Grid:如何对绑定到一个简单json对象的列进行排序(和过滤)
- 从 2 个数组进行排序/过滤
- 表过滤,排序,在html中使用jquery/javascript/css进行区分记录
- 如何使用 Ajax Json PHP 和 MySQL 应用排序和过滤
- 如何创建可排序、可过滤和可编辑的 html/javascript 表
- 用于 API 混搭、过滤和排序的在线 etl
- 无法使用角度智能表进行排序/过滤/搜索
- jqGrid使用JsonString JsonReader实现服务器端排序分页过滤
- jQueryDataTables头上有两行:第一行列名和排序,第二行过滤
- AngularJS中的排序、过滤和分页
- 使用Jquery/AJAX/Javascript搜索、排序、分页和过滤DIV
- Jquery,过滤和隐藏元素,如何排序这些"元素到底
- 使用ng-table自定义过滤/排序并选择
- IE9中的ExtJS 5网格过滤和排序中断
- Angular $parse在过滤/排序以整数开头的哈希值时出错
- 用Angular JS的排序和过滤保留砖石效果
- JQuery排序和过滤列表
- 基于某些属性对JSON进行排序/过滤