我有一个localStorage,它可以动态创建密钥。它们基本上存储'name'
和'age'
,每种情况都有不同的前缀。区分我正在使用endsWith()
方法。
我有一个函数,它会将.append
的数据用于元素。问题在于,在调用函数的时刻,由于结果未定义,我无法使其工作:
// below I'm faking result of localStorage
var fakeStorage = {
'aaa-name': 'John',
'aaa-age': 20,
'bbb-name': 'Robert',
'bbb-age': 45,
'ccc-name': 'James',
'bbb-age': 30,
'somethingUneeded': 'cars',
'anotherSomethingUneeded': 'money'
}
$.each(fakeStorage, function (key, value) {
if (!key.endsWith('name') && !key.endsWith('age')) {
return
}
var name
var age
if (key.endsWith('name')) {
name = value
} else {
// get results of "age"
age = value
}
console.log(name)
// returns:
// John
// undefined
// Robert
// undefined
// James
// undefined
console.log(age)
// returns:
// 20
// undefined
// 45
// undefined
// 30
// undefined
// Here's the function I need for the sake of undertanding.
// with the above output I can't call it due to undefined
// functionToAppendBoth(name, age)
})
我如何处理该代码,以便跳过“未定义”值?我使用当前结果编写了一个CodePen:http://codepen.io/anon/pen/ZLRjNg?editors=1010
答案 0 :(得分:1)
您可以创建一个新的对象,并为其分配以后可以轻松使用的值,
我可以想到结构如:
{
name: [],
age: []
}
示例代码段:
// below I'm faking result of localStorage
var fakeStorage = {
'aaa-name': 'John',
'aaa-age': 20,
'bbb-name': 'Robert',
'bbb-age': 45,
'ccc-name': 'James',
'bbb-age': 30,
'somethingUneeded': 'cars',
'anotherSomethingUneeded': 'money'
}
var tempObj = {
name: [],
age: []
};
$.each(fakeStorage, function(key, value) {
if (!key.endsWith('name') && !key.endsWith('age')) {
return
}
if (key.endsWith('name')) {
tempObj.name.push(value)
} else {
tempObj.age.push(value)
}
});
console.log(tempObj);
$.each(tempObj.name, function(index) {
console.log(tempObj.name[index] + ' ' + tempObj.age[index]);
})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
或者我们可以进行状况检查,看看我们是否有姓名和年龄。
示例代码段:
// below I'm faking result of localStorage
var fakeStorage = {
'aaa-name': 'John',
'aaa-age': 20,
'bbb-name': 'Robert',
'bbb-age': 45,
'ccc-name': 'James',
'bbb-age': 30,
'somethingUneeded': 'cars',
'anotherSomethingUneeded': 'money'
}
var tempObj = {
name: '',
age: ''
};
$.each(fakeStorage, function(key, value) {
if (!key.endsWith('name') && !key.endsWith('age')) {
return
}
if (key.endsWith('name')) {
tempObj.name = value
} else {
tempObj.age = value
}
if (tempObj.name && tempObj.age) {
console.log(tempObj.name + ' ' + tempObj.age);
//call desired function here;
tempObj = {
name: '',
age: ''
};
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;