javascript - 在 $.each 循环中,获取两种不同类型的对象返回值和未定义

标签 javascript jquery loops local-storage

我有一个可以动态创建 key 的本地存储。它们基本上存储 '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

最佳答案

您可以创建一个新对象并为其分配稍后可以轻松使用的值,

我可以想到这样的结构:

{
  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>

或者我们可以进行条件检查,看看我们是否有姓名和年龄。

示例片段:

// 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: ''
    };
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 在 $.each 循环中,获取两种不同类型的对象返回值和未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058538/

相关文章:

java - 需要在不使用 Hashmaps 的情况下找出数组中的重复元素

r - "*apply"家族真的没有矢量化吗?

javascript - 将消息数组拆分为对话

javascript - Google api - 防止标记在缩放时改变大小

javascript - jQuery 将 div 切片成动画片段

javascript - 根据与 `<a>` 类名的比较,将类添加到 `<li>` 标签

javascript - 如何从 div 元素中删除 data- 属性?

javascript - 将文本输入字符串中的日期转换为其他格式javascript

javascript - 包含图像网络服务的国家/地区列表

c++ - 如何迭代结构中的 vector ?