Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 - Fatal编程技术网

Javascript 如何根据条件在第一个位置创建一个新的数组位置?

Javascript 如何根据条件在第一个位置创建一个新的数组位置?,javascript,Javascript,我有一个名为data的数组,我需要创建一个新数组,其中匹配变量toBeFirst的元素是第一个数组 请注意,我无法触摸原始阵列数据 const toBeFirst = 'b' const data = [{name: 'a'},{name: 'b'},{name: 'e'}, {name: 'x'}] // final result const data = [{name: 'b'},{name: 'a'},{name: 'e'}, {name: 'x'} 你知道如何使用最新的js吗?可以使

我有一个名为
data
的数组,我需要创建一个新数组,其中匹配变量
toBeFirst
的元素是第一个数组

请注意,我无法触摸原始阵列
数据

const toBeFirst = 'b'
const data = [{name: 'a'},{name: 'b'},{name: 'e'}, {name: 'x'}]

// final result
const data = [{name: 'b'},{name: 'a'},{name: 'e'}, {name: 'x'}

你知道如何使用最新的js吗?可以使用reduce?

只需附加元素,如果是该特殊元素,则预先添加:

const result = data.reduce((arr, el) => el.name === toBeFirst ? [el].concat(arr) : arr.concat([el]), []);
但对数组进行变异可能是错误的:

data.unshift(data.splice(data.findIndex(el => el.name === toBeFirst), 1)[0]);

只需附加元素,如果是特殊元素,则在前面加上前缀:

const result = data.reduce((arr, el) => el.name === toBeFirst ? [el].concat(arr) : arr.concat([el]), []);
但对数组进行变异可能是错误的:

data.unshift(data.splice(data.findIndex(el => el.name === toBeFirst), 1)[0]);

如果你能提供你的测试代码那就太好了。无论如何,你可以使用双重过滤。要回答第二个问题:是的,您可以使用
reduce
,请参阅代码段

const toBeFirst='b'
常量数据=[{name:'a'},{name:'b'},{name:'e'},{name:'x'}];
const dataFirstB=data.filter(v=>v.name===toBeFirst)
.concat(data.filter(v=>v.name!==toBeFirst));
console.log(dataFirstB);
//使用减速器
const dataReduced=data.reduce((a,v)=>
v、 名字!==toBeFirst?[…a,v]:a,
data.filter(v=>v.name===toBeFirst));

console.log(数据缩减)如果您提供了测试代码,那就太好了。无论如何,你可以使用双重过滤。要回答第二个问题:是的,您可以使用
reduce
,请参阅代码段

const toBeFirst='b'
常量数据=[{name:'a'},{name:'b'},{name:'e'},{name:'x'}];
const dataFirstB=data.filter(v=>v.name===toBeFirst)
.concat(data.filter(v=>v.name!==toBeFirst));
console.log(dataFirstB);
//使用减速器
const dataReduced=data.reduce((a,v)=>
v、 名字!==toBeFirst?[…a,v]:a,
data.filter(v=>v.name===toBeFirst));
console.log(数据缩减)