我正在尝试重新排列数组的排序。 假设我具有以下结构
const array = [{
location: 'Table 2',
data: {..}
}, {
location: 'Unassigned',
data: {..}
}, {
location: 'Table 1',
data: {..}
}
];
将“表1”移到索引0,紧随其后的“表2”(对表3、4等保持相同的顺序)并始终“未分配”的正确方法是什么?最好搭配lodash。
这是我到目前为止尝试过的
forEach(allItemsSorted, (item, index) => {
const total = allItemsSorted.length;
let hasUnassigned = false;
if (item.location === 'Unassigned') {
allItemsSorted[total] = item;
hasUnassigned = true;
}
if (hasUnassigned && index === total) {
return;
}
allItemsSorted[index] = item;
})
答案 0 :(得分:1)
您可以使用一个对象来获取所需的订单,并使用默认值来获取未知值,以便将该项目移动到数组的末尾。
@Configuration
@EnableWebFlux
public class MyConfiguration implements WebFluxConfigurer {
}
const
array = [{ location: 'Table 2', data: {} }, { location: 'Unassigned', data: {} }, { location: 'Table 1', data: {} }],
order = { 'Table 1': 1, 'Table 2': 2, default: Infinity };
array.sort(({ location: a }, { location: b }) =>
(order[a] || order.default) - (order[b] || order.default));
console.log(array);
对于仅按升序对所有.as-console-wrapper { max-height: 100% !important; top: 0; }
末尾和所有其他值进行排序,您也可以使用上述order对象,但是已知和未知字符串的值都会更改。
'Unassigned'
const
array = [{ location: 'Table 2', data: {} }, { location: 'Unassigned', data: {} }, { location: 'Table 1', data: {} }],
order = { Unassigned: 1 };
array.sort(({ location: a }, { location: b }) =>
(order[a] || 0) - (order[b] || 0) || a.localeCompare(b));
console.log(array);
答案 1 :(得分:1)
您可以使用Array.sort()
-始终将FIRMessaging
移动到末尾(两个Unassigned
)。使用String.localeCompare()
和numeric
option对其他项目进行排序。
注意::我使用array spread-if
-克隆数组,因此原始数组不会发生突变。如果要更改原始数组,可以跳过。
[...array]
答案 2 :(得分:1)
如果您有以array
开头的location
个值,而未分配的值为Table
,那么如何对Unassigned
进行排序。将适用于这种情况。但是要小心其他值,除非它们是您想要的结果。
const array = [{location:'Table 2', data: {}}, {location: 'Unassigned', data: {}}, {location: 'Table 1', data: {}}];
array.sort(function(a,b){
return a.location.localeCompare(b.location);
});
console.log(array);
答案 3 :(得分:1)
如果您想重新排列数组,请始终寻找Array.sort方法。创建具有自定义添加功能的新阵列只会带来困难。
您可以尝试以下操作:
location
并返回数值的函数。
const array = [
{location:'Table 2', data: {}},
{location: 'Unassigned', data: {}},
{location: 'Table 1', data: {}},
{location: 'Table 11', data: {}},
{location: 'Table 31', data: {}},
{location: 'Table 3', data: {}},
];
array.sort(function(a,b) {
return getSortValue(a.location) - getSortValue(b.location);
});
function getSortValue(location) {
return location === 'Unassigned' ? Number.MAX_SAFE_INTEGER : location.match(/\d+/)[0];
}
console.log(array)
答案 4 :(得分:0)
怎么样
var data1 = [{location:'Table 2', data: {}}, {location: 'Unassigned', data: {}}, {location: 'Table 1', data: {}}, {location: 'Table 12', data: {}}, {location: 'Table 22', data: {}}, {location: 'Unassigned', data: {}}];
data.sort((a,b)=> a.location > b.location).filter(item => item.location != 'Unassigned').push([...data.filter(item => item.location == 'Unassigned')]);
结果
[{
"location": "Table 1",
"data": {}
},
{
"location": "Table 12",
"data": {}
},
{
"location": "Table 2",
"data": {}
},
{
"location": "Table 22",
"data": {}
},
{
"location": "Unassigned",
"data": {}
},
{
"location": "Unassigned",
"data": {}
}]