Javascript 如何将排序后的数据分配给不可变对象
我从Javascript 如何将排序后的数据分配给不可变对象,javascript,angular,immutability,ecmascript-2016,Javascript,Angular,Immutability,Ecmascript 2016,我从ngrx/store获取数据,该数据在前端排序。当数据排序后,我将赋值回value,但没有更新发生。我知道数据是不可变的。但是如何将该值赋回到不可变的 这是我的尝试:this.data-排序后未更新 this.data = this.data.slice().sort((a, b) => { if (this.sort) { if (isNaN(a)) { if (a[sortBy] < b[sortBy]) { return -1;
ngrx/store
获取数据,该数据在前端排序。当数据排序后,我将赋值回value,但没有更新发生。我知道数据是不可变的。但是如何将该值赋回到不可变的
这是我的尝试:this.data
-排序后未更新
this.data = this.data.slice().sort((a, b) => {
if (this.sort) {
if (isNaN(a)) {
if (a[sortBy] < b[sortBy]) {
return -1;
}
}
if (!isNaN(a)) {
return a[sortBy] - b[sortBy];
}
}
if (!this.sort) {
if (isNaN(a)) {
if (b[sortBy] < a[sortBy]) {
return -1;
}
}
if (!isNaN(a)) {
return b[sortBy] - a[sortBy];
}
}
});
this.data=this.data.slice().sort((a,b)=>{
if(this.sort){
if(isNaN(a)){
if(a[sortBy]
在这种情况下,您可以通过管道使用排序。下面是一个可以帮助您解决问题的代码。下面的代码能够处理数字、字符串、对象的数组
您可以传递一个需要应用排序的键。如果需要,也可以按相反顺序排序
同样,通过这种方式,您无需修改数据和重新分配。管道和角度将根据传递的输入进行排序,并在UI上显示。您可以在代码中使用此管道
import {
Pipe,
PipeTransform
} from "@angular/core";
@Pipe({
name: "sortBy"
})
export class ArraySortByPipe implements PipeTransform {
public transform(array: any[], reverse: boolean = false, prop ? : string) {
if (!Array.isArray(array)) {
return array;
}
if (array.length) {
let sortedArray: any[];
if (typeof array[0] === "string") {
sortedArray = array.sort();
}
if (typeof array[0] === "number") {
sortedArray = array.sort((a, b) => a - b);
}
if (typeof array[0] === "object" && prop) {
sortedArray = array.sort((a, b) => a[prop].toString().localeCompare(b[prop].toString()));
}
return !reverse ? sortedArray : sortedArray.reverse();
}
return array;
}
}
希望这有帮助:)。如果您仍然面临任何问题,请告诉我。在这种情况下,您可以通过管道使用。下面是一个可以帮助您解决问题的代码。下面的代码能够处理数字、字符串、对象的数组
您可以传递一个需要应用排序的键。如果需要,也可以按相反顺序排序
同样,通过这种方式,您无需修改数据和重新分配。管道和角度将根据传递的输入进行排序,并在UI上显示。您可以在代码中使用此管道
import {
Pipe,
PipeTransform
} from "@angular/core";
@Pipe({
name: "sortBy"
})
export class ArraySortByPipe implements PipeTransform {
public transform(array: any[], reverse: boolean = false, prop ? : string) {
if (!Array.isArray(array)) {
return array;
}
if (array.length) {
let sortedArray: any[];
if (typeof array[0] === "string") {
sortedArray = array.sort();
}
if (typeof array[0] === "number") {
sortedArray = array.sort((a, b) => a - b);
}
if (typeof array[0] === "object" && prop) {
sortedArray = array.sort((a, b) => a[prop].toString().localeCompare(b[prop].toString()));
}
return !reverse ? sortedArray : sortedArray.reverse();
}
return array;
}
}
希望这有帮助:)。如果您仍然面临任何问题,请告诉我。要确认,此。数据是不可变的类型吗?是列表吗
?我建议您使用管道对记录进行排序。。用谷歌搜索你会发现很多…@JonE-是的,你是correct@Manish-排序在这里是参数。我使用多个组件作为reusable@3gwebtrain即使sortyBy是一个参数,您也可以使用管道..来确认,this.data
是一个不可变的类型吗?是列表吗
?我建议您使用管道对记录进行排序。。用谷歌搜索你会发现很多…@JonE-是的,你是correct@Manish-排序在这里是参数。我使用多个组件作为reusable@3gwebtrain即使sortyBy是一个参数,您也可以使用管道..我们如何在ngrx中使用它?@profiler尚未尝试使用ngrx。如果你面临问题,请告诉我。。我会想办法在ngrx中如何使用它?@profiler还没有尝试过使用ngrx。如果你面临问题,请告诉我。。我会想出办法的