1 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
據(jù)我了解,您最終得到了三個(gè)數(shù)組。這些數(shù)組將具有一致的長(zhǎng)度,索引表示它們?cè)诒碇械哪囊恍?。您想要的是根?jù)一個(gè)的值對(duì)所有三個(gè)數(shù)組的索引進(jìn)行排序。這意味著您需要確保每當(dāng)移動(dòng)一個(gè)數(shù)組中的值時(shí),所有其他數(shù)組的值都會(huì)從相同的位置移動(dòng)。
不幸的是,我知道本機(jī)函數(shù)無(wú)法做到這一點(diǎn)。您必須自己實(shí)現(xiàn)排序才能以這種方式管理它。
在前端,最好將關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)化為對(duì)象數(shù)組,而不是一組關(guān)聯(lián)的表狀數(shù)組。這樣,您可以更直觀地執(zhí)行排序、搜索、過(guò)濾等。讓我們來(lái)看看如何做到這一點(diǎn)。
我將使用您的測(cè)試對(duì)象:
var testObject = {
id_values: [20, 10, 40],
od_values: [30, 15, 2],
qty_values: [6, 3, 15]
};
要將關(guān)聯(lián)數(shù)組轉(zhuǎn)換為包含關(guān)聯(lián)數(shù)據(jù)的對(duì)象數(shù)組,我將實(shí)例化一個(gè)具有與表相同數(shù)量索引的零填充數(shù)組。然后,我們映射這個(gè)空白數(shù)組,從每個(gè)表中的數(shù)據(jù)創(chuàng)建一個(gè)對(duì)象:
const dataArray = new Array(obj[by].length).fill(0).map((_, i) => {
return {
id_values: testObject.id_values[i],
od_values: testObject.od_values[i],
qty_values: testObject.qty_values[i]
}
}) .sort((a, b) => a[by] > b[by])
此時(shí),表格將被轉(zhuǎn)換為對(duì) JavaScript 更友好的對(duì)象數(shù)組,如下所示:
const dataArray = [
{ id_values: 20, od_values: 30, qty_values: 6 },
{ id_values: 10, od_values: 15, qty_values: 3 },
{ id_values: 40, od_values: 2, qty_values: 15 }
]
現(xiàn)在可以使用本機(jī)數(shù)組排序輕松排序:
dataArray.sort((a, b) => a.od_values > b.od_values)
這將導(dǎo)致它被排序!
const sortedData = [
{ id_values: 40, od_values: 2, qty_values: 15 },
{ id_values: 10, od_values: 15, qty_values: 3 },
{ id_values: 20, od_values: 30, qty_values: 6 }
]
通過(guò)減少對(duì)象數(shù)組,可以將這些值解構(gòu)到它們的關(guān)聯(lián)表中:
dataArray.reduce((acc, el) => {
Object.keys(el).map(col => {
acc[col].push(el[col])
})
return acc
}, {
id_values: [],
od_values: [],
qty_values: []
})
產(chǎn)生原始數(shù)據(jù)結(jié)構(gòu),但按所選屬性排序:
const sortedArrays = {
id_values: [ 40, 10, 20 ],
od_values: [ 2, 15, 30 ],
qty_values: [ 15, 3, 6 ]
}
把它們放在一起:
var testObject = {
id_values: [20, 10, 40],
od_values: [30, 15, 2],
qty_values: [6, 3, 15]
};
const sortTableObj = (obj, by) => {
const dataArray = new Array(obj[by].length).fill(0).map((_, i) => {
return {
id_values: testObject.id_values[i],
od_values: testObject.od_values[i],
qty_values: testObject.qty_values[i]
}
}).sort((a, b) => a[by] > b[by])
console.log('dataArray: ', dataArray)
return dataArray.reduce((acc, el) => {
Object.keys(el).map(col => {
acc[col].push(el[col])
})
return acc
}, {
id_values: [],
od_values: [],
qty_values: []
})
}
sortTableObj(testObject, 'od_values')
如果您有任何問(wèn)題,請(qǐng)告訴我!
添加回答
舉報(bào)