【发布时间】: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