【问题标题】:create javascript object from for loop从 for 循环创建 javascript 对象
【发布时间】:2018-11-08 23:59:21
【问题描述】:

我想创建一个如下所示的可排序 javascript 对象:

myArray = [
  {name: "Jones, James", ef: "35", mem: "2018.12.10"},
  {name: "Smith, Paul", ef: "35", mem: "2018.09.12"},
  {name: "Washington, George", ef: "35", mem: "2018.08.16"}
];

我还计划按名称对 myArray() 进行排序。

myArray.sort(function(a, b){
  return a.name - b.name;
});

JAVASCRIPT:

function store() {
  var myArray = [];

  var i;
  for (i = 0; i < 10; i++) {
    NAME = document.getElementById('P' + i).value;
    EF = document.getElementById('E' + i).value;
    MEM = document.getElementById('M' + i).value;

    // This code doesn't seem to add records to myArray()

    myArray.push({
      name: 'NAME',
      ef: 'EF',
      mem: 'MEM'
    });
  }

  console.log(myArray.length);
}

store();

我对 myArray 进行了排序:

0: {name: "Abercrombie, Bill", rank: "1537", uscf: "9999", ef: "3", exp: "2019.01.12", …}
1: {name: "Baken, Clif", rank: "1802", uscf: "9999", ef: "3", exp: "2019.09.18", …}
2: {name: "Kukla, Ollie", rank: "2014", uscf: "0920", ef: "", exp: "2019.08.12", …}
3: {name: "Lincoln, Abraham", rank: "2023", uscf: "0119", ef: "", exp: "2019.09.06", …}
4: {name: "Washington, George", rank: "1563", uscf: "9999", ef: "3", exp: "2019.01.16", …}

如何遍历排序的 myArray() 以填充表单?我想我需要这样的东西:

console.log(myArray.length);

for (i = 1; i <= myArray.length; i++) {
// where id "P1" is the name input field in the form which we are populating
document.getElementById("P" +i).value = myArray[name];

}

【问题讨论】:

  • 到目前为止你尝试过什么?请将其包含在 OP 中
  • 我是 localStorage 的新手,我不知道自己在做什么。我需要帮助。我可以做一些事情,但这非常先进。古拉迪奥,我真的很头疼。
  • 您可以使用 JSON.stringify() 设置和 JSON.parse() 在 get 中将数组或单个对象存储在一个 localStorage 键中。然后遍历该数组/对象并在循环中设置值,只需要很少的代码
  • 我认为:localStorage.setItem('SP4', JSON.stringify(document.getElementById("P4").value))); (是正确的)。但是如何使用 JSON.stringify 将本地存储放入可排序的数组中?
  • 您要排序的具体内容是什么?您提到 "P1-P48" 但这与什么有关?是 &lt;input&gt; 元素中的值还是它们的 id 属性。这很令人困惑,因为您的 ID 是 P4E4X4,考虑到 "P1-P48",这真的没有意义

标签: javascript jquery


【解决方案1】:

既然你用的是jQuery,为什么不这样构建myArray

for (n = 1; n <= 3; n++) {
  myArray.push({
    name: $('#P' + n).val(),
    ef: $('#E' + n).val(),
    mem: $('#M' + n).val()
  });
}

用于对myArray 进行排序:(归功于MDN referencethis answer

myArray.sort((a, b) => {
  let nameA = a.name.toUpperCase();
  let nameB = b.name.toUpperCase();
  return nameA < nameB ? -1 : nameA > nameB ? 1 : 0;
});

然后将myArray 值放回相应的input 字段中:

myArray.forEach((item, i) => {
  let n = i + 1;
  $('#P' + n).val(item.name);
  $('#E' + n).val(item.ef);
  $('#M' + n).val(item.mem);
  // ... do the same for other fields
});

【讨论】:

    【解决方案2】:

    代码有几个问题:

    • 没有声明变量 NAMEEFMEM

      这意味着these are implicit globals (!) 并且您的代码可能会有意想不到的副作用。

      解决方案:使用varlet 甚至更好的const 在块范围内声明这些变量。

    • 推送的是字符串,而不是变量

      当您执行myArray.push({name: 'NAME'}) 时,您是说将字符串值'NAME' 作为name 的值。

      解决方案:去掉引号,使用name: NAME,或者更好,将变量改为name,使用ES2015 shorthand notation

      myArray.push({name, ef, mem});

    • prefer to use const if you are not reassigning variables. Use let in all other cases.

      这只会使您的代码更加健壮,因为它们比使用旧的var 具有更少的怪癖。

    例子:

    function store() {
      const myArray = [];
    
      for (let i = 0; i < 10; i++) {
        // Replaced getElementByID since it's not relevant
        const name = 'some name';
        const ef = 'some string';
        const mem = 'some value';
    
        // This code doesn't seem to add records to myArray()
    
        myArray.push({name, ef, mem});
      }
    
      console.log(myArray.length);
    }
    
    store();

    【讨论】:

      【解决方案3】:

      两步:

      1- 制作Array []

      2- 使用排序功能对其项目进行排序

      记住 localStorage 设置和获取字符串,所以使用JSON.parse() 方法解析它们

      排序功能:(按属性名称的字母顺序排序)

      Array.prototype.sort()

      演示:

      let result = array.sort((a.name, b.name) => a.name - b.name)
      

      【讨论】:

      • 这怎么能工作...?我有带有 SP1 到 SP48 的 localStorage 作为排序项目。在您提供的表达中,我没有看到对此的任何引用。
      • 首先我们填充一个可排序的 javascript 对象,然后从排序列表中填写表单。
      • 是的...我更新了答案..如果有帮助,您可以将其标记为解决方案
      • 一个简单的数组在这种情况下是没有用的。请参阅原始问题。我必须对“数组”进行排序,然后遍历“数组”以提取变量并填充表单。
      • 排序对象通常没有用看到这个答案:stackoverflow.com/questions/1069666/… ...所以排序数组可以成为你的解决方案
      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 2020-08-03
      • 2012-12-27
      • 2020-09-28
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多