Mr *_*ide 2 javascript arrays sorting json object
我有一个这样的对象:
var data = [
{ id: "fmgbwe45", age: 24, gender: "male" },
{ id: "kjregh23", age: 27, gender: "female" },
{ id: "kjfdhg87", age: 30, gender: "male" },
{ id: "lsdjfk43", age: 10, gender: "female" },
]
Run Code Online (Sandbox Code Playgroud)
我想对对象进行排序,这是我的预期输出:
var data = [
{ id: "kjfdhg87", age: 30, gender: "male" }, //only one record will match in my sort
{ id: "fmgbwe45", age: 24, gender: "male" },
{ id: "kjregh23", age: 27, gender: "female" },
{ id: "lsdjfk43", age: 10, gender: "female" },
]
Run Code Online (Sandbox Code Playgroud)
我已经试过了:
$scope.sort_by = function (newSortingOrder) {
var stringToFilter = newSortingOrder.toString(); //this holds 'kjfdhg87'
var obj = data.sort(function(o) { return o.id - stringToFilter; });
var finalObj = [obj];
sortedData = finalObj;
console.log(sortedData ); //sorting is not working as expected where im doing wrong.
}
Run Code Online (Sandbox Code Playgroud)
由于您只是将一项移至顶部,因此我将仅使用splice()和unshift()该项:
var data = [
{ id: "fmgbwe45", age: 24, gender: "male" },
{ id: "kjregh23", age: 27, gender: "female" },
{ id: "kjfdhg87", age: 30, gender: "male" },
{ id: "lsdjfk43", age: 10, gender: "female" },
]
data.forEach(function(item,i){
if(item.id === "kjfdhg87"){
data.splice(i, 1);
data.unshift(item);
}
});
console.log(data);Run Code Online (Sandbox Code Playgroud)
您可以使用unshift方法。
var data = [
{ id: "fmgbwe45", age: 24, gender: "male" },
{ id: "kjregh23", age: 27, gender: "female" },
{ id: "kjfdhg87", age: 30, gender: "male" },
{ id: "lsdjfk43", age: 10, gender: "female" },
]
var stringToFilter = 'kjfdhg87'; //this holds 'kjfdhg87'
data.unshift(data.splice(data.findIndex(item => item.id === stringToFilter), 1)[0])
console.log(data);Run Code Online (Sandbox Code Playgroud)
这是一种不同的非变异方法。我仅将 TypeScript 用于 Person 定义,但除此之外只是 ES6。
基本上我们只需要:
movePersonInArray(person: Person, arrayOfPersons: Person[]): Person[] {
// remove the item from the array
const filteredArrayOfPersons = arrayOfPersons.filter((p: Person) => p.id !== person.id);
// add it at the beginning
return [{ ...person }, ...filteredArrayOfPersons];
}
Run Code Online (Sandbox Code Playgroud)
如果您不介意稍微混合一下,您可以避免使用扩展运算符并使用unshift代替。我特别不喜欢将改变数组的函数与不改变数组的函数混合使用,但在某些情况下,您可能会获得一些性能改进。例如,对于一个很长的数组,原始方法中的以下更改将在保持易读性的同时加快速度。
movePersonInArray(person: Person, arrayOfPersons: Person[]): Person[] {
// remove the item from the array
const filteredArrayOfPersons = arrayOfPersons.filter((p: Person) => p.id !== person.id);
// add it at the beginning
filteredArrayOfPersons.unshift({...person});
return filteredArrayOfPersons;
}
Run Code Online (Sandbox Code Playgroud)
这两种方法都不会改变arrayOfPersons数组,而是返回带有更改的副本。在这里您可以了解有关数组变异方法的更多信息 https://doesitmutate.xyz/
附注。该人类型可以是这样的:
export interface Person {
id: string;
name: string;
age: number;
}
Run Code Online (Sandbox Code Playgroud)
和平!
| 归档时间: |
|
| 查看次数: |
4550 次 |
| 最近记录: |