【问题标题】:decrementing after array mapping not working数组映射不起作用后递减
【发布时间】:2021-03-13 16:20:57
【问题描述】:

我有一个函数“Next”,它映射一个数组,如下例所示,在增加元素后我正在做某事,但我还有另一个函数“Prev”,它几乎做了类似的映射,但在那个函数中,我正在减少元素。 Next 函数可以正常工作,但 Prev 函数不能,有人可以帮我解决这个问题吗?

我正在映射一个对象数组

[
   {
      "id":"v82b3a65",
      "name":"Name"
   },
   {
      "id":"u0b26551",
      "name":"Name2"
   }
]

我的功能:

const Next = () => {
  array.items.map((item, key, element) => {
    var next = element[key ++];
    setId(next.id);
  });
};

const Prev = () => {
  array.items.map((item, key, element) => {
    var prev = element[key --];
    setId(prev.id);
  });
};

render(
<View>
<Button title={'Prev'} onPress={Prev}/>
<Button title={'Next'} onPress={Next}/>
</View>
)

我在按钮的 onPress 中使用这些功能

我需要的结果:按下 Next 按钮时我希望它设置 setID = 下一个对象 id 并且按下 Prev 按钮我想设置 setID = 上一个对象 id

【问题讨论】:

  • 你在哪里增加元素? index++ 增加索引,而不是元素。你的意思是var next = value + 1?或者只是 value++ 并删除整个 next 变量,因为 ++ 增加(并更新)value 变量。
  • 请添加更多代码并解释正在发生的事情以及您希望看到的不同情况
  • @akaphenom 我已经更新了代码
  • 我想弄清楚你为什么要映射到数组上?我仍然不确定您想要的结果是什么?地图适用于每个包含的实例...

标签: javascript typescript react-native


【解决方案1】:

您应该检查index 值是否大于Prev 函数中的0。还要检查它是否小于 Next 函数中的数组长度 - 1。

const Next = () => {
  var newArray = myArray.map(function (value, index, elements) {
    if (index < myArray.length - 1) {
      var next = elements[index + 1];
      // do something
    }
  });
};

const Prev = () => {
  var newArray = myArray.map(function (value, index, elements) {
    if (index > 0) {
      var next = elements[index - 1];
      // do something
    }
  });
};

【讨论】:

  • 变量名后有++--,返回值是以前的值,变量名前有,返回值是新值。我认为您需要切换++-- 的位置。好吧,要么切换位置,要么只是知道+1-1,因为您不需要修改index 变量。
  • 如果整个函数体将被包裹在 if 语句中,我建议使用保护子句。例如。 if (index &gt;= myArray.length - 1) return; 这改进了代码缩进。但是,当next 不可用时,我不确定该计划的用途。不带值返回会将元素映射到undefined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2013-04-26
  • 2014-07-19
  • 2011-09-07
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多