最近,我在使用javascript。这是我的例子。
工作代码:
const start = index - 4 >= 0 ? index - 4 : 0
const end = index + 4 > this.props.initialMarkers.length
? this.props.initialMarkers.length
: index + 4
for (let i = start; i <= end; i++) {
newData.push(this.props.initialMarkers[i])
}
不工作代码:
for (let i = index - 4 >= 0 ? index - 4 : 0; i <= index + 4 > this.props.initialMarkers.length
? this.props.initialMarkers.length
: index + 4; i++) {
newData.push(this.props.initialMarkers[i])
}
为什么我的第二个代码不起作用?请帮助我。
为什么我的第二个代码不起作用?请帮助我。
您的问题出在此部分
i <= index + 4 > this.props.initialMarkers.length
基本上 <= 和> 具有相同级别的运算符优先级,因此除非您进行分组
i <= ( index + 4 > this.props.initialMarkers.length ? this.props.initialMarkers.length : index + 4 );
js 引擎将首先执行i <= index + 4
。希望这有帮助。
您需要为表达式添加大括号:
// calculation works with braces preference so you will get desired output
// same as it was with start and end variables
for (let i = 1; i <= (((index + 4) > this.props.initialMarkers.length)
? this.props.initialMarkers.length
: (index + 4)); i++) {
newData.push(this.props.initialMarkers[i])
}
您尝试的是给出不同的结果(根据不带大括号使用的数学运算符):
let index = 5; // static value
for (let i = index - 4 >= 0 ? index - 4 : 0; i <= index + 4 > 6
? 6
: index + 4; i++) { // 6 is static value for this.props.initialMarkers.length
console.log('start', i);
console.log('end value without breaces:', i <= index + 4 > 6
? 6
: index + 4); // your condition
console.log('end', ((i <= ((index + 4) > 6))
? 6
: (index + 4))); // with breces
break; // added break as some time it will go in infinite loop
}
您需要添加大括号
for (let i = (index - 4 >= 0 ? index - 4 : 0); i <= (index + 4 > this.props.initialMarkers.length
? this.props.initialMarkers.length
: index + 4); i++) {
newData.push(this.props.initialMarkers[i])
}