将对象数组中的值与 React Native/Javascript 中的字符串进行比较
Posted
技术标签:
【中文标题】将对象数组中的值与 React Native/Javascript 中的字符串进行比较【英文标题】:Compare value from array of objects to string in React Native/Javascript 【发布时间】:2018-04-07 06:37:00 【问题描述】:我正在尝试使用 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 语句中。
任何帮助将不胜感激!
【问题讨论】:
是不是名为selectedFrequency
的数组?
不确定您所说的“数组是否命名为 selectedFrequency?”你能澄清一下吗?也感谢您的意见!
【参考方案1】:
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'
您需要循环遍历您的 frequency
对象。即:
for (let j = 0; j < frequency.length; j++)
if (frequency[j].value === 'Daily')
【讨论】:
是的,做到了!感谢所有为此提供帮助的人,我真的很感激。【参考方案2】:JSON.stringify 用于将 JSON 转换为字符串对象。
您的 selectedFrequency[j].value
已经是一个字符串。因此,您不需要转换它。
【讨论】:
这正是我的想法,但是当我在没有 JSON.stringify 的情况下运行代码时,我最终得到了这个错误:json value of type nsmutabledictionary cannot be converted to nsstring.
关于为什么会发生这种情况的任何想法?感谢您的回复!如果有帮助,我也可以发布错误的屏幕截图【参考方案3】:
我认为错误发生在您的 if 条件中
在您的代码中 selectedFrequency[j].value 已经是一个字符串,但是您再次对该字符串进行字符串化,从而产生类似“”Daily””的结果!==“Daily”。因此删除 JSON.stringify 它应该可以工作
if (selectedFrequency[j].value === 'Daily')
【讨论】:
这正是我的想法,但是当我在没有 JSON.stringify 的情况下运行代码时,我最终得到了这个错误:json value of type nsmutabledictionary cannot be converted to nsstring.
关于为什么会发生这种情况的任何想法?感谢您的回复!如果有帮助,我也可以发布错误的屏幕截图以上是关于将对象数组中的值与 React Native/Javascript 中的字符串进行比较的主要内容,如果未能解决你的问题,请参考以下文章
将对象中的值与HTML选择选项中的值匹配的Javascript函数?