找到反转数组的原始索引

时间:2016-11-11 10:43:47

标签: javascript arrays json reverse

我使用reverse()javascript函数来反转本地存储阵列中保存的对象。但是我试图将原始索引与新排序的数组结合起来。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.indexOf("Apple"); //2
var fruitsReversed = fruits.reverse();
fruitsReversed.indexOf("Apple"); //1 -> I want to know that it used to be 2

有一种简单的方法吗?我的实际情况有点复杂,因为原始字符串是JSON格式:

var data = {"info":[{"name":"Max"},{"name":"Alex},{"name":"Sam"},{"name":"Chris"}]}

......但我不知道这是否会产生影响。

更新:我使用了一些解决方法来解决这个问题:

var fruitsLength = fruitsReversed.length-1; //3. subtract one because the first index is 0, not 1
var fruitIndex = fruitsLength - fruitsReversed.indexOf("Apple"); //2 (3-1)

所以虽然这有效,但我认为必须有一个更清洁的方式......

4 个答案:

答案 0 :(得分:0)

首先在您的示例中fruits === fruitsReversed。我在下面解释reverse()如何发生。

您在评论中提到需要显示数组的反转版本,除非您要编辑原始版本。如果您的数组包含多组对象,那么您根本不需要担心索引。考虑一下这个数组:

var arr = [{ val: 1 }, { val: 2 }];

如果您反转此数组,它仍将包含原始对象,因为只有引用才会更改。这意味着如果您只需要更改数组属性(例如,在这种情况下为val),只需传递对实际对象的引用。例如:

var arr = [{ val: 1 }, { val: 2 }];
var anObject = arr[0];
arr.reverse();
// this changes the original objects value
anObject.val = 5;
// this prints 5
console.log(arr[1].val);

考虑到这一点,在您的视图中,只需传入反转数组中项目的索引即可。就个人而言,我会使用像angular或react这样的数据绑定库,只需改变项本身,将它们与任何数组排序分离。

docs还解释了reverse()如何变化的原因。

  

reverse()方法将数组反转到位。第一个数组元素成为最后一个,最后一个数组元素成为第一个。

这意味着实际原始数组被更改,在反转之前不会复制。您不必使用返回的内容,只需拨打arr.reverse()

即可

答案 1 :(得分:0)



myArray=[{"name":"Max"},{"name":"Alex"},{"name":"Sam"},{"name":"Chris"}];
pos = myArray.map(function(e) { return e.name; }).reverse().indexOf('Alex');
console.log("position before reverse="+pos);




答案 2 :(得分:0)

我建议在对象中使用唯一标识符来访问对象,而不需要知道数组的索引。

然后你可以重新排序数组,并通过哈希表进行访问。



var data = { info: [{ name: "Max" }, { name: "Alex" }, { name: "Sam" },{ name: "Chris" }] },
    hash = Object.create(null);

data.info.forEach(function (a) {
    hash[a.name] = a;
});

console.log(hash.Max);
console.log(hash["Sam"]);
console.log(hash);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 3 :(得分:0)

减去长度后返回索引 返回fruits.length -1-fruitsReversed.indexOf(“ Apple”)