Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 改变数组元素的位置_Javascript_Arrays - Fatal编程技术网

Javascript 改变数组元素的位置

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 =

我希望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 = [
   { 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);