Javascript 改变数组元素的位置
我希望defaultCard成为cards数组中的第一张卡。 在这种情况下,结果将是Javascript 改变数组元素的位置,javascript,arrays,Javascript,Arrays,我希望defaultCard成为cards数组中的第一张卡。 在这种情况下,结果将是 let cards = [ { name: 'a', value: '234'}, { name: 'b', value: '876' }, { name: 'c', value: '765'}, { name: 'd', value: '980' } ]; let defaultCard = 'c'; 最好的办法是什么 我所做的是获取默认卡的索引,并使用0索引进行交换 cards =
let cards = [
{ name: 'a', value: '234'},
{ name: 'b', value: '876' },
{ name: 'c', value: '765'},
{ name: 'd', value: '980' }
];
let defaultCard = 'c';
最好的办法是什么
我所做的是获取默认卡的索引,并使用0索引进行交换
cards = [
{ name: 'c', value: '765'},
{ name: 'a', value: '234'},
{ name: 'b', value: '876' },
{ name: 'd', value: '980' }
]
您可以使用Array.sortmethod并将匹配排序提高:
让卡片=[{
名称:‘a’,
值:“234”
},
{
名称:‘b’,
值:“876”
},
{
名称:‘c’,
值:“765”
},
{
名称:“d”,
值:“980”
}
];
让defaultCard='c';
让ans=cards.sorta,b=>{
如果a.name==defaultCard{
返回-1
}
返回1
}
console.logans您可以使用Array.sortmethod并使匹配排序更高:
让卡片=[{
名称:‘a’,
值:“234”
},
{
名称:‘b’,
值:“876”
},
{
名称:‘c’,
值:“765”
},
{
名称:“d”,
值:“980”
}
];
让defaultCard='c';
让ans=cards.sorta,b=>{
如果a.name==defaultCard{
返回-1
}
返回1
}
console.logans这里有一种通过解构和Array.filter方法实现的方法 让卡片=[ {name:'a',value:'234'}, {name:'b',value:'876'}, {name:'c',value:'765'}, {name:'d',value:'980'} ]; 让defaultCard='c'; cards=[cards.finditem=>item.name==defaultCard,…cards.filteritem=>item.name!==defaultCard];
控制台、日志卡 这里有一种通过分解结构和Array.filter方法实现的方法 让卡片=[ {name:'a',value:'234'}, {name:'b',value:'876'}, {name:'c',value:'765'}, {name:'d',value:'980'} ]; 让defaultCard='c'; cards=[cards.finditem=>item.name==defaultCard,…cards.filteritem=>item.name!==defaultCard];
控制台、日志卡 如果不想更改原始数组,可以找到index array.findIndex,然后通过将元素放在顶部的索引处,并展开索引前后的切片来构造新数组: const moveToTop=名称,arr=>{ const idx=arr.findIndexo=>o.name==name; ifidx==-1返回arr; 返回[ arr[idx], …arr.0,idx, …arr.sliceidx+1 ] } const cards=[{name:a,value:234},{name:b,value:876},{name:c,value:765},{name:d,value:980}]; const defaultCard='c'; const result=moveToTopdefaultCard,卡片;
console.logresult 如果不想更改原始数组,可以找到index array.findIndex,然后通过将元素放在顶部的索引处,并展开索引前后的切片来构造新数组: const moveToTop=名称,arr=>{ const idx=arr.findIndexo=>o.name==name; ifidx==-1返回arr; 返回[ arr[idx], …arr.0,idx, …arr.sliceidx+1 ] } const cards=[{name:a,value:234},{name:b,value:876},{name:c,value:765},{name:d,value:980}]; const defaultCard='c'; const result=moveToTopdefaultCard,卡片;
console.logresult;请告诉我们你的努力,如果有任何问题,我们可以help@ASDFGerte,请检查我的密码。我编辑过。如果你能提出一些建议的话。现在已经有了一个非常充分的答案,所以我认为我不必这么做。但是,我删除了我的否决票,因为编辑后的问题包括努力的证明。请向我们展示你的努力,如果有任何问题,我们可以help@ASDFGerte,请检查我的密码。我编辑过。如果你能提出一些建议的话。现在已经有了一个非常充分的答案,所以我认为我不必这么做。然而,我删除了我的否决票,因为编辑后的问题包含了努力的证据。@AsdGerte为冒犯您表示歉意。是什么使compare函数不正确?对于默认元素不是第一个参数的任何调用,它都返回1,这使得它不是对称的,仅命名一个点。为了得到结果,除了将默认值移到前面之外,还需要对其他元素进行置乱。啊,我明白了,问题是,这在chrome上偶然得到了想要的结果。这真的只是一个偶然的机会,让事情变得清楚。例如,Firefox已经不能提供理想的结果。对不起,如果我有点过于不满,我想这是我的错,不是你的错。让我们澄清一下:1排序具有对数时间复杂性,而这个问题应该在线性时间内解决。2传递给sort的comparefunction必须满足某些条件-向下滚动一点,a函数comparefn是一致的[…]部分,或者生成的顺序是实现定义的。在您的情况下,chrome的V8恰好提供了所需的结果,但这只是运气,其他实现没有,例如FF。@ASDFGerte为冒犯您表示歉意。是什么使compare函数不正确?对于默认元素不是第一个参数的任何调用,它都返回1,这使得它不是对称的,仅命名一个点。为了得到结果,除了将默认值移到前面之外,还需要对其他元素进行置乱。啊,我明白了,问题是,这在chrome上偶然得到了想要的结果。这真的只是一个偶然的机会,让事情变得清楚。
例如,Firefox已经不能提供理想的结果。对不起,如果我有点过于不满,我想这是我的错,不是你的错。让我们澄清一下:1排序具有对数时间复杂性,而这个问题应该在线性时间内解决。2传递给sort的comparefunction必须满足某些条件-向下滚动一点,a函数comparefn是一致的[…]部分,或者生成的顺序是实现定义的。在您的情况下,chrome的V8恰好提供了所需的结果,但这只是运气,其他实现没有,例如FF。
function getIndex(arr, defaultCard) {
return arr.findIndex((item) => item.name === defaultCard);
}
function getSortedCard(arr) {
let index = getIndex(arr, defaultCard);
if (index < 1) return arr;
let temp = arr[index];
arr[index] = arr[0];
arr[0] = temp;
return arr;
}
const newArr = getSortedCard(cards);
console.log(newArr);