数组推送在JavaScript中对相同的值使用相同的索引

数组推送在JavaScript中对相同的值使用相同的索引,javascript,jquery,arrays,Javascript,Jquery,Arrays,我刚刚发现,使用相同的值名使用函数array.push(value),将为具有相同值名的第一项提供相同的索引 请看下面的示例代码: <p>Click the button to add a new element to the array.</p> <button onclick="myFunction()">Try it</button> <p id="demo"></p> <script> var fr

我刚刚发现,使用相同的值名使用函数array.push(value),将为具有相同值名的第一项提供相同的索引

请看下面的示例代码:

<p>Click the button to add a new element to the array.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits;

function myFunction() {
    fruits.push("Orange");
var orange_index = fruits.indexOf("Orange");
document.getElementById("demo").innerHTML = orange_index;
}
</script>
单击按钮将新元素添加到数组中

试试看

var水果=[“香蕉”、“橙子”、“苹果”、“芒果”]; document.getElementById(“demo”).innerHTML=fruits; 函数myFunction(){ 水果。推(“橙色”); var orange_指数=水果指数(“橙色”); document.getElementById(“demo”).innerHTML=orange\u索引; }
如果运行它,您会注意到答案是“1”,它对应于插入到数组中的第一个“橙色”项

我怎样才能避免这种行为?我需要将相同的值插入到具有不同索引的数组中

我需要使用多维数组吗? 我有一副牌,我需要把军衔和军服排成一排。到目前为止,我为军衔和西装创建了两个不同的数组,但我遇到了这个问题。我分别检索军衔和军服,是否应该将它们合并到一个新的多维数组中?怎么做

谢谢

方法返回数组中可以找到给定元素的第一个索引,如果该元素不存在,则返回-1

单击“in”按钮后,您的阵列如下所示:

["Banana", "Orange", "Apple", "Mango", "Orange"]
因此,当您尝试:

var orange_index = fruits.indexOf("Orange");
这将返回第一个索引
橙色
,就像您在描述中看到的那样,因此通常它将返回
1
使用
.lastIndexOf()
而不是
.indexOf()
,并且它将得到最后一个(最近添加的)索引,而不是始终第一个


这就是代码的外观。让我知道你在尝试什么它在JSFIDLE上不起作用。我在w3schoolspush上尝试过它,它返回数组的新长度,因此该项的索引就是(长度-1)。您如何期望javascript知道您指的是第二个而不是第一个?您完全正确。那么我该如何解决这个问题呢?如果你检查我问题的最后一部分,我解释我真正的问题。请尝试更新你的问题,并用一个例子进一步澄清。我将创建一个新问题,因为我改变了我的方式;我现在正在使用对象,实际上我需要找到那个索引。无论如何谢谢你。你怎么期望他总是最后一个。假设op能够掌握不同值的概念来保持数组的完整性。如果不是,我建议保持数组值的独特性,但这需要使用更多的功能来完成。Op没有澄清,他只是想要最近添加的项目的索引。很抱歉,我没有指定它,但我不需要最后一个索引项目。(无论如何,谢谢你的建议,以后会有用的)。我在文章的最后一部分解释了真正的问题question@koo27然后,您可能需要考虑创建自己的<代码> Pux<代码>函数,该函数将在附加到数组之前删除具有相同名称的现有值。因为它们代表一副牌。所以我想我可能会使用一个多维数组,带有等级和套装,对吗?