javascript - 在 React Native/Javascript 中比较对象数组与字符串的值

标签 javascript arrays reactjs react-native asyncstorage

我正在尝试使用 If 语句将数组中对象的属性与字符串进行比较。我正在使用 for 循环,但由于某种原因,我似乎无法触发条件语句。这是我用来将对象存储在 AsyncStorage 中的代码:

onPressNext= async () => {
        if (this.state.selectedFrequency.length > 0) {
            const selectedFrequency = this.state.selectedFrequency;
            try {
                await AsyncStorage.setItem('selectedFrequency', JSON.stringify(selectedFrequency));
              } catch (error) {
                // Error saving data
              }

这是我稍后用来检索对象的代码:

onPressNext= async () => {

        if (this.state.selectedExclusions.length > 0) {
            try {
                const value = await AsyncStorage.getItem('selectedFrequency');
                if (value !== null) {
                  console.log(JSON.parse(value));
                  const selectedFrequency = JSON.parse(value);

                  for (let j = 0; j < selectedFrequency.length; j++) {
                    if (JSON.stringify(selectedFrequency[j].value) === 'Daily') {
                        selectedFrequency[j].splice(j, 1);
                     } else {
                        console.log(JSON.stringify(selectedFrequency[j].label));
                     }   
                 }
                }
              } catch (error) {
                // Error retrieving data
                Alert.alert(
                    error,
                    'Sorry, there was an error',
                    [
                      { text: strings.Okay, style: 'cancel' },
                    ]
                );
              }

这就是数组的结构:

frequency = [
    { label: strings.Daily, value: 'Daily' },
    { label: strings.Weekly, value: 'Weekly' },
    { label: strings.Monthly, value: 'Monthly' },
    { label: strings.Every_Three_Months, value: '3 Months' },
    { label: strings.three_five_Years, value: '5 Years' },
    { label: strings.Ten_Years, value: '10 Years' }
]; 

我期望发生的是,如果对象数组包含字符串值为 Daily 的项目,则该项目将被删除。因此,for 循环遍历数组,检查值并删除任何值为 Daily 的对象。如下所述,我认为问题出在 for 循环中的 If 语句中。

任何帮助将不胜感激!

最佳答案

const selectedFrequency = JSON.parse(value);
     for (let j = 0; j < selectedFrequency.length; j++) {
           if (JSON.stringify(selectedFrequency[j].value) === 'Daily') 

您正在循环访问从 AsyncStorage 返回的 selectedFrequency 字符串中的字符。 selectedFrequency 是一个字符串,对其运行 for 循环会得到“D”、“a”、“i”、“l”、“y”。当然,字符串上没有 value 方法,因此每个条件只是比较 undefined === 'Daily'

您需要循环遍历您的频率对象。即:

     for (let j = 0; j < frequency.length; j++) {
           if (frequency[j].value === 'Daily')

关于javascript - 在 React Native/Javascript 中比较对象数组与字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944826/

相关文章:

javascript - jQuery.ajax *仅*检索状态代码但不检索/下载整个文档?

javascript - 在 IE 中调试 JavaScript

javascript - 由于未知原因,我的随机播放功能在 26 处停止。我怎样才能让它洗所有的牌呢?

arrays - 将 PowerShell 数组传递给函数时如何展开它

c++ - 为什么这行得通? [C++;空指针]

javascript - LESS 1.3.3,观看模式在 espresso 编辑器中占用大量 CPU

javascript - "$(document).on"在 event.stopPropagation 之后不触发和 "$(a).on"不触发新元素

javascript - ReactDOM.render() 未解决

javascript - 将 React 组件渲染为单个 DOM 元素

reactjs - 如何重置所有浏览器 session (选项卡)中的 Redux 状态