我正在用Array.prototype.map()
转换数组,如果当前项目符合某些条件,我想更改其上一个项目。
下面的代码似乎无法正常工作,如何在没有for
循环的情况下进行操作?
var nums = [1, 2, 3, 4, 5];
var res = nums.map((item, index, array) => {
if (item > 3) {
array[index - 1] += 1;
}
return item;
});
console.log(res); // [ 1, 2, 3, 4, 5 ], I want [1, 2, 4, 5, 5]
答案 0 :(得分:1)
不能像这样引用从.map
创建的数组。相反,请创建forEach
的数组外部,然后将其推入/分配给它:
var nums = [1, 2, 3, 4, 5];
const newArr = [];
nums.forEach((item, index) => {
if (item > 3) newArr[index - 1] += 1;
newArr.push(item);
});
console.log(newArr); // I want [1, 2, 4, 5, 5]
答案 1 :(得分:1)
您可以使用减速器
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val pref = this.getSharedPreferences("myPrefs", Context.MODE_PRIVATE)
if (!pref.getString("login", "").isEmpty()) {
portText.setText(pref.getString("login", ""))
}
loginButton.setOnClickListener {
val login = portText.text.toString()
pref.edit().putString("login", login).apply()
startActivity(Intent(this, SecondActivity::class.java))
}
}
答案 2 :(得分:1)
免责声明:之所以只提供此答案,是因为我觉得有人问“如何在不使用for循环的情况下执行X”,我觉得所有地图之间至少应该有一个 递归解决方案。减少:)
在没有for循环的情况下该怎么办?
如果您对性能或堆栈崩溃风险不太在意,则可以使用递归函数!
这是一个例子:
first
,second
和其余的first
为空,则说明计算已经结束并返回结果first
不为空,我们可以将其与second
进行比较以确定其值。我们将值添加到结果中并递归:[second, ...rest]
并传递结果
const input = [ 1, 2, 3, 4, 5 ];
const Empty = Symbol();
const incIfBt3 =
([first = Empty, second, ...rest], result = []) =>
first === Empty
? result
: incIfBt3(
[second, ...rest],
[...result, first + (second > 3)]
);
console.log(incIfBt3(input));
答案 3 :(得分:0)
您可以向前看而不是向后看:
var nums = [1, 2, 3, 4, 5];
var res = nums.map((item, index, array) => {
if (array[index + 1] > 3) {
item += 1;
}
return item;
});
答案 4 :(得分:0)
您可以使用array
参数查看 next 项并为返回一个值,而不是尝试更改上一个项>相应的当前项目:
var nums = [1, 2, 3, 4, 5];
var res = nums.map((item, index, array) => item + (array[index + 1] > 3 ? 1 : 0));
console.log(res); // [1, 2, 4, 5, 5]
您还可以利用布尔值的数字值为1或0来消除条件表达式的事实:
var nums = [1, 2, 3, 4, 5];
var res = nums.map((item, index, array) => item + (array[index + 1] > 3));
console.log(res); // [1, 2, 4, 5, 5]