【问题标题】:How to append an iterator index number to each item within an array with Javascript?如何使用Javascript将迭代器索引号附加到数组中的每个项目?
【发布时间】:2014-12-27 20:08:11
【问题描述】:

如何将一个名为“Index”的键附加到下面的数组中,其中的值是字典索引?该数组应在此发生之前按 Timestamp 排序,以便 TimeStamp:111 排在第一位,TimeStamp:222 排在第二位,依此类推。

例如,原始数组见下文

items = [
            {Id: "01", Name: "A", Price: "1.00", Quantity: "1",TimeStamp:111},
            {Id: "02", Name: "B", Price: "10.00", Quantity: "1",TimeStamp:222},
            {Id: "04", Name: "C", Price: "9.50", Quantity: "10",TimeStamp:434},
            {Id: "03", Name: "a", Price: "9.00", Quantity: "2",TimeStamp:545},
            {Id: "06", Name: "b", Price: "100.00", Quantity: "2",TimeStamp:676},
            {Id: "05",Name: "c", Price: "1.20", Quantity: "2",TimeStamp:777}
        ];

生成的数组应如下所示:

items = [
    {Id: "01", Name: "A", Price: "1.00", Quantity: "1",TimeStamp:111,Index:1},
            {Id: "02", Name: "B", Price: "10.00", Quantity: "1",TimeStamp:222,Index:2},
            {Id: "04", Name: "C", Price: "9.50", Quantity: "10",TimeStamp:434,Index:3},
            {Id: "03", Name: "a", Price: "9.00", Quantity: "2",TimeStamp:545,Index:4},
            {Id: "06", Name: "b", Price: "100.00", Quantity: "2",TimeStamp:676,Index:5},
            {Id: "05",Name: "c", Price: "1.20", Quantity: "2",TimeStamp:777,Index:6}
        ];

这是我的尝试:http://jsfiddle.net/chrisguzman/f7dnfrjf/ 我已经想出了如何将一个项目附加到每个字典,但不知道如何附加其各自的迭代器。

另外,这里是 angular js(如果有使用 angular 的方法可以加分):http://codepen.io/chriscruz/pen/GgjGvO?editors=101

【问题讨论】:

  • 目的是什么? Angular 已经在ng-repeat 中提供了对$index 的访问权限(如果这是它的用途)
  • 这是一个很好的问题,并且触及了我问题的核心。问题是,如果 $index 为数组中的项目提供相同的索引,无论它是否被过滤,它都会很好地工作。换句话说,如果原始数组的第三项被过滤掉,那么 3 将被分配给另一个我不想要的项。请参阅此代码笔了解我的意思:codepen.io/chriscruz/pen/GgjGvO?editors=101。请注意 $index 为 'a' 返回 1,即使它是第三项。有没有更好的方法来做到这一点?
  • 使用track by $index
  • 谢谢!您的提问确实使我通过使用 indexOf 找到了更好的整体解决方案。对于其他有类似问题的人,请在此处查看新的 codepen:codepen.io/chriscruz/pen/pvEKpB

标签: javascript jquery arrays angularjs iterator


【解决方案1】:

索引从0开始,所以你需要为每个索引添加+1,像这样

items.forEach(function (d, index) {
    d.Index = index + 1;
});

演示:http://jsfiddle.net/f7dnfrjf/1/

Angular 演示:

  1. http://codepen.io/pen/ZYpRag - 索引显示为 2、3、5、6

  2. http://codepen.io/pen/zxKapG - 索引显示为 1、2、3、4

【讨论】:

    【解决方案2】:

    运行时系统向.forEach()传递3个参数:第一个是数组元素,第二个是索引,第三个是数组本身。

    因此:

    items.forEach(function (d, i) {
        d.Index = i;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2021-09-14
      • 2017-05-29
      • 2015-03-10
      • 2015-10-11
      • 1970-01-01
      相关资源
      最近更新 更多