Javascript中的操作问题



最近,我在使用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])
}

相关内容

  • 没有找到相关文章

最新更新