迭代时对对象数组排序-JavaScript
我有一个对象数组,我正在迭代并推送到一个新数组。迭代时对对象数组排序-JavaScript,javascript,arrays,Javascript,Arrays,我有一个对象数组,我正在迭代并推送到一个新数组。 我还希望新数组将按特定值排序(不使用.sort()) 排列 想要的结果 arr2 = [ {name: "one", value: 2}, {name: "two", value: 12}, {name" "three", value: 16} ] 尝试 合并是一种不使用sort()进行排序的好方法 arr1=[ {名称:“三”,值:16}, {名称:“一”,值:2}, {名称:“两个”,值:12} ] 控制台日志(合并排序
我还希望新数组将按特定值排序(不使用.sort()) 排列 想要的结果
arr2 = [
{name: "one", value: 2},
{name: "two", value: 12},
{name" "three", value: 16}
]
尝试
合并是一种不使用sort()进行排序的好方法
arr1=[
{名称:“三”,值:16},
{名称:“一”,值:2},
{名称:“两个”,值:12}
]
控制台日志(合并排序(arr1))
函数合并排序(arr)
{
如果(arr.length<2)
返回arr;
var middle=parseInt(arr.length/2);
var left=arr.slice(0,中间);
var right=arr.slice(中间,arr.length);
返回merge(mergeSort(左)、mergeSort(右));
}
函数合并(左、右)
{
var结果=[];
while(left.length&&right.length){
if(左[0]。值与单个值进行比较是行不通的,因为下一个值可能在前面的元素之间。排序是一个非常复杂的问题,计算机科学对此进行了广泛的研究。如果不想接触原始数组,只需在排序之前克隆它即可:
arr1=[
{名称:“三”,值:16},
{名称:“一”,值:2},
{名称:“两个”,值:12}
]
arr2=[…arr1].sort((a,b)=>a.value-b.value);
log(arr2);
只需根据值对数组进行排序
const arr1=[
{名称:“三”,值:16},
{名称:“一”,值:2},
{name:“two”,value:12},
];
const output=arr1.sort((a,b)=>a.value-b.value);
console.log(output);
我将研究排序算法,因为您只查看第一个索引,不起作用。请尝试克隆此数组,并为新数组编写一个比较器,使其保持不变。
arr2 = [
{name: "one", value: 2},
{name: "two", value: 12},
{name" "three", value: 16}
]
arr1.forEach(item => {
if (arr2.length) {
const lastObj = arr2[arr2.length - 1];
if (item.value > lastObj.value) {
arr2.push(item)
} else {
arr2.unshift(item)
}
} else {
arr2.push(item)
}
})