Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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,例如,我想写一些类似于: const initial = [1, 2, 3, 4]; const indexIWantToChange = 2; const obj = { prop: () => { const newArr = [...initial]; newArr[indexIWantToChange] = 'Something new'; return newArr; }() }; 如何通过索引更改数组中的一个特定元素,而不改变函数样式中的原始

例如,我想写一些类似于:

const initial = [1, 2, 3, 4];
const indexIWantToChange = 2;

const obj = {
  prop: () => {
    const newArr = [...initial];
    newArr[indexIWantToChange] = 'Something new';
    return newArr;
  }()
};
如何通过索引更改数组中的一个特定元素,而不改变函数样式中的原始数组?
这可能只有一行吗?

大多数返回数组的函数通常都是通过map完成的

const initial = [1, 2, 3, 4];
const indexIWantToChange = 2;
const newValue = "blah"

let changed = initial.map((x,i) => i == indexIWantToChange ? newValue : x )
可能有用:

Object.assign([], initial, { [indexIWantToChange]: 'Something new' })
片段:

const initial=[1,2,3,4];
常数indexIWantToChange=2;
让prop=Object.assign([],initial,{[indexIWantToChange]:'somethinew'});

控制台日志(道具)有很多方法可以用所谓的函数式方法来实现这一点@基思·尼古拉斯有一个很好的解决方案。由于需要克隆阵列,O(n)时间复杂性至关重要

另一种方法是

var initial=[1,2,3,4],
indexIWantToChange=2,
newValue=“随便什么”,
更改=初始.reduce((p,c,i)=>i==indexIWantToChange?p.concat(新值):p.concat(c),[]);

控制台日志(已更改)是的,这是一种方法,但它要经过整个数组。也许是一些辅助功能?我在lodash文档中没有发现任何此类内容。@Revels,如果使用save immutability,您的意思是不改变原始数组,那么您必须遍历该数组,这也是原始代码中的spread运算符所做的。您如何想象在不经过整个数组的情况下获得数组的变体?数组不是不可变的。你指的是什么不变性?…不管怎样:
newArr=[…initial.slice(0,idx),“新事物”,…initial.slice(idx+1)]
也许这就是你想要的。我真的说不出你想要什么。在那些没有固有功能性的语言中,试图在不使用详尽库的情况下强制使用功能性样式只会是低效的。@revels,看看这真的很干净。谢谢