就是这个对象。
var arr = {
firstValue:"xyz",
content:[
{
"value": "abc",
"checked": true
},
{
"value": "xyz",
"checked": false
},
{
"value": "lmn",
"checked": true
}
]
}
在这个firstValue是xyz所以当映射xyz时应该像这样先出现:
var arr = {
firstValue:"xyz",
content:[
{
"value": "xyz",
"checked": true
},
{
"value": "abc",
"checked": false
},
{
"value": "lmn",
"checked": true
}
]
}
如何使用javascript实现这一点,
谢谢。
const arr = {
firstValue: "xyz",
content: [
{
value: "abc",
checked: true,
},
{
value: "xyz",
checked: false,
},
{
value: "lmn",
checked: true,
},
],
};
const index = arr.content.findIndex((item) => item.value === arr.firstValue);
if (index !== -1 && index !== 0) {
arr.content.unshift(...arr.content.splice(index, 1));
}
看起来你只是想把匹配的对象排序到最上面。
您可以使用Array#sort()
,尽管这会改变原始对象,所以如果它处于状态,您将希望在排序之前进行克隆。
var arr = { firstValue: 'xyz', content: [ { value: 'abc', checked: true, }, { value: 'xyz', checked: false, }, { value: 'lmn', checked: true, }, ], };
const sorted = [...arr.content].sort((a, b) =>
(b.value === arr.firstValue) - (a.value === arr.firstValue));
console.log(sorted);
否则,您可以使用Array#findIndex()
找到对象的索引,然后使用Array#splice()
和Array#unshift()
将其移动到数组的开头。这里声明一个实用函数并返回传递数组的副本,以避免变异。
var arr = { firstValue: 'xyz', content: [ { value: 'abc', checked: true, }, { value: 'xyz', checked: false, }, { value: 'lmn', checked: true, }, ], };
const orderFirst = (a) => {
const res = [...a];
const i = a.findIndex((o) => o.value === arr.firstValue);
if (i && i !== -1) {
res.unshift(res.splice(i, 1));
}
return res;
};
const sorted = orderFirst(arr.content);
console.log(sorted);