我有以下数组ob对象:
let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0}
]
并希望以这种方式对其进行排序
let expected = [
{id: 1, number: 43},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 8, number: 36},
{id: 2, number: 0},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 69, number: 0}
]
所有数字为0的对象应位于数组的末尾,但先前的顺序应仍然存在
我尝试了array.sort(),但没有收到期望的结果
答案 0 :(得分:3)
您首先要过滤非零对象,而不是零对象。然后连接两个数组。
let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0}
]
const expected = [
...given.filter(item => item.number !== 0),
...given.filter(item => item.number === 0)
]
console.log(JSON.stringify(expected))
或者,如果您认为两个循环可能会影响您的应用性能,则可以使用一个循环。
答案 1 :(得分:2)
您可以将支票的差额排序为零。
let given = [{ id: 1, number: 43 }, { id: 2, number: 0 }, { id: 3, number: 3 }, { id: 4, number: undefined }, { id: 5, number: 1 }, { id: 6, number: 0 }, { id: 7, number: 0 }, { id: 8, number: 36 }, { id: 69, number: 0 }];
given.sort(({ number: a }, { number: b }) => (a === 0) - (b === 0));
console.log(given);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
您可以将给定的数组分为2个,零个和noneZeros,同时保留Array.reduce的原始顺序。
let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0},
];
const x = given.reduce(
(result, item) => {
if (item.number === 0) {
result.zeros.push(item);
} else {
result.noneZeros.push(item);
}
return result;
},
{zeros: [], noneZeros: []}
);
console.log(x.noneZeros.concat(x.zeros));
答案 3 :(得分:0)
您可以使用两个数组进行
let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0}
]
var a = [];
var b = [];
for(let data of given){
if(data.number == 0){
a.push(data)
} else {
b.push(data)
}
}
var c = b.concat(a);
console.log(c)
答案 4 :(得分:0)
使用带回调功能的排序:
given.sort((a,b) => b.number === 0 && a.number !== 0 ? -1 : 0);
答案 5 :(得分:0)
let given = [
{ id: 1, number: 43 },
{ id: 2, number: 0 },
{ id: 3, number: 3 },
{ id: 4, number: undefined },
{ id: 5, number: 1 },
{ id: 6, number: 0 },
{ id: 7, number: 0 },
{ id: 8, number: 36 },
{ id: 69, number: 0 },
];
var zeroarray = given.filter((val) => {
if (val.number === 0) return val;
});
var nonzeroarray = given.filter((val) => {
if (val.number != 0) return val;
});
var final=[...nonzeroarray,...zeroarray];
console.log(final);
答案 6 :(得分:0)
let given = [
{id: 1, number: 43},
{id: 2, number: 0},
{id: 3, number: 3},
{id: 4, number: undefined},
{id: 5, number: 1},
{id: 6, number: 0},
{id: 7, number: 0},
{id: 8, number: 36},
{id: 69, number: 0}
]
var arr = []
for(var i = 0; i < given.length; i++){
if(given[i].number === 0){
arr.push(given[i]);
}
}
given = given.filter(item => item.number !== 0);
given = given.concat(arr)
console.log(given)