我在数组列表,我如何显示它的一个元素应该首先基于条件映射?



就是这个对象。

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);

相关内容

  • 没有找到相关文章

最新更新