javascript - For 循环和数组问题 - ngRepeat

标签 javascript jquery arrays angularjs

我有一个数组,其中包含一些数据,名为 data .

数据如下:

var data = [
  {
    id: 1,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'Gray',
    choice_no: 1
  },
  {
    id: 2,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'one',
    choice_no: 2
  },
  {
    id: 3,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'two',
    choice_no: 2
  },
  {
    id: 4,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'three',
    choice_no: 2
  },
  {
    id: 5,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'four',
    choice_no: 2
  },
  {
    id: 6,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'five',
    choice_no: 2
  },
  {
    id: 7,
    title: 'title',
    desc: 'desc',
    price: 1.12,
    choice1: 'Color',
    choice2: 'Size',
    large_picture: 'picture',
    choice: 'Black',
    choice_no: 1
  },
];

我目前正在尝试循环data将它们分成两个单独的数组: colorsize .

现在data的对象并不总是有 choice1choice2作为属性。 (只是稍后的旁注)

我正在检查第二个选择并执行循环:

if (data[0].choice2) {
  // Has 2 choices
  for (var i in data) {

    if (data[i].choice1.toUpperCase() == 'SIZE' && data[i].choice_no == 1) {
      size[i] = {
        choice: data[i].choice,
        order: data[i].sort
      };
    } else if (data[i].choice2.toUpperCase() == 'SIZE' && data[i].choice_no == 2) {
      size[i] = {
        choice: data[i].choice,
        order: data[i].sort
      };
    } else if (data[i].choice1.toUpperCase() == 'COLOR' && data[i].choice_no == 1) {
      color[i] = {
        choice: data[i].choice,
        order: data[i].sort
      };
    } else if (data[i].choice2.toUpperCase() == 'COLOR' && data[i].choice_no == 2) {
      color[i] = {
        choice: data[i].choice,
        order: data[i].sort
      };
    }

  } // End for()

}

这种类型有效。 color.length = 7,但是,当它应该只等于 2 时。如果我像这样循环它:

for ( var x in color ) {
  console.log(color[x]);  
}

它输出:

Object {choice: "Gray", order: 2}
Object {choice: "Black", order: 1}

但是如果我将循环更改为 var x = 0; x < color.length; x++它循环 0-6,“灰色”和“黑色”之间的所有内容都是 undefined 。现在我只使用第一个循环,因为它“有效”,但是 ngRepeat工作原理与第二个数组类似。它循环遍历所有 7 条记录。

TL;DR

我很确定我的 if 上的某个地方搞砸了阻止试图分离choice1choice2进入适当的数组(颜色和大小)。 值得注意的是choice1重要 总是颜色( choice1 可能是尺寸),甚至可能没有任何选择。而且我对修改数据的方式也非常有限。

最佳答案

不要使用索引设置数组,而是尝试使用方法 .push()

像这样:

if (data[i].choice1.toUpperCase() == 'SIZE' && data[i].choice_no == 1) {
  size.push({ // <--- .push( instead of [i] = 
    choice: data[i].choice,
    order: data[i].sort
  });
} else ...

关于javascript - For 循环和数组问题 - ngRepeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547773/

相关文章:

c - C 中的指针跟踪

javascript - 在 VueJS 中使用计算属性过滤结果时,如何显示数组中的所有文章?

c# - 查找使用 jQuery 在代码隐藏中创建的控件

javascript - 幻灯片和缩放功能不再适用于获取内容

c++ - 可变长度数组在主函数中编译,但在类声明中不编译?

iphone - 无法在 iphone 上转换字节数组

javascript - Vue.js vue-video-player 渲染 100px 宽

javascript - 返回一个包含 N 个元素的新数组的简洁方法,其中填充了另一个数组中的迭代值?普通 JavaScript

javascript - XSLT,需要将 javascript 插入 onclick 处理程序

javascript - 我可以使用 jquery 字符串来定位 id 吗?