我有两个数组,一个包含一些项目,另一个包含这些项目的 sorted id,例如:
const sortedItems = [
{ id: 4, label: 'ipsum' },
{ id: 3, label: 'lorem' },
{ id: 2, label: 'bar' },
{ id: 1, label: 'foo' },
]
我想拥有另一个数组,其中包含按其ID排序的项目,如下所示:
asc
请注意,顺序不一定是desc
或let sortedItems = []
sortedItemIds.map((itemId, index) => {
items.map(item) => {
if (item.id === itemId) {
sortedItems[index] = item
}
}
})
我编写了这段代码,工作得很好:
Array.map()
由于嵌套的<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-52143532-4", "auto");
ga("require", "ec");
ga("ec:addProduct", {
"id": "pay-q39-instead-of-q90-fo",
"name": "Pay Q39 instead of Q90 for haircut (2018-09-17)",
"category": "Other",
"brand": "The Barber's Shop",
"variant": "male",
"price": "5.07"
});
// Transaction level information is provided via an actionFieldObject.
ga("ec:setAction", "detail");
ga("send", "event", "ecommerce", "detail");
</script>
函数,我觉得我可能会遇到大量项目的问题
在这种情况下,是否有更好的方法/最佳实践?
答案 0 :(得分:3)
您可以创建一个键为id的对象,然后使用该对象通过id获取值。
const items = [{ id: 1, label: 'foo' },{ id: 2, label: 'bar' },{ id: 3, label: 'lorem' },{ id: 4, label: 'ipsum' }]
const sortedItemIds = [4, 3, 2, 1]
const obj = {}
items.forEach(o => obj[o.id] = o);
const sortedItems = sortedItemIds.map(e => Object.assign({}, obj[e]));
console.log(sortedItems)
答案 1 :(得分:1)
执行此操作不需要功能映射,只需使用查找Array.indexOf
和Array.sort
对其进行排序即可。
const items = [{ id: 1, label: 'foo' },{ id: 2, label: 'bar' },{ id: 3, label: 'lorem' },{ id: 4, label: 'ipsum' }],
sortedItemIds = [4, 3, 2, 1];
items.sort((a, b) => sortedItemIds.indexOf(a.id) - sortedItemIds.indexOf(b.id));
console.log(items);
.as-console-wrapper { max-height: 100% !important; top: 0; }