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,看看这真的很干净。谢谢