我试图使用If语句将数组中对象的属性与String进行比较。我使用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' },
]
);
}
这就是aray的结构:
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语句中。
任何帮助将不胜感激!
答案 0 :(得分:1)
JSON.stringify用于将JSON转换为字符串对象。
您的selectedFrequency[j].value
已经是一个字符串。因此,您不需要转换它。
答案 1 :(得分: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循环会给你&#34; D&#34;,&#34; a&#34;,&#34; i&#34;,&#34; l&#34;,&#34; y&#34;。当然,字符串上没有value
方法,因此每个条件都只是比较undefined === 'Daily'
您需要循环遍历frequency
对象。即:
for (let j = 0; j < frequency.length; j++) {
if (frequency[j].value === 'Daily')
答案 2 :(得分:0)
我认为错误发生在你的if条件
中在你的代码中,selectedFrequency [j] .value已经是一个字符串,但是你再次对这个字符串进行字符串化,产生的结果就像&#34;&#34;每日&#34;&#34; !==&#34;每日&#34;。因此删除JSON.stringify,它应该工作
if (selectedFrequency[j].value === 'Daily')