在Javascript数组中使用indexOf()

在Javascript数组中使用indexOf(),javascript,arrays,Javascript,Arrays,我有这样一个数组[HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”]。我从控制台上得到这个 我试图找出下面的值 var sku = skus_colorcode.indexOf('9620'); console.log(sku); 但它正在返回-1 为什么我会得到这个结果 试试这个 function arraySearch(arr,val) { for (va

我有这样一个数组
[HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”]
。我从控制台上得到这个

我试图找出下面的值

var sku = skus_colorcode.indexOf('9620');                   
console.log(sku);
但它正在返回-1

为什么我会得到这个结果

试试这个

function arraySearch(arr,val) {
    for (var key in arr) {
        this_val = array[key];
        if(this_val == val){
            return key;
            break;
        }
    }
 }
试试这个

function arraySearch(arr,val) {
    for (var key in arr) {
        this_val = array[key];
        if(this_val == val){
            return key;
            break;
        }
    }
 }

您的代码根本无效。数组是元素的列表,没有键。 必须使用对象,如下所示:

var skus_colorcode = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}
要查找对应于“9620”的键(HT…),请尝试以下代码:

var keys = Object.getOwnPropertyNames(skus_colorcode), key;

for(var i = 0; i < keys.length; i++)
    if(skus_colorcode[keys[i]] === "9620") {
        key = keys[i];
        break;
    }

// The right key is into the "key" variable
console.log(key); // says "HT2787Z2UK"
var keys=Object.getOwnPropertyNames(skus\u colorcode),key;
对于(变量i=0;i
您的代码根本无效。数组是元素的列表,没有键。 必须使用对象,如下所示:

var skus_colorcode = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}
要查找对应于“9620”的键(HT…),请尝试以下代码:

var keys = Object.getOwnPropertyNames(skus_colorcode), key;

for(var i = 0; i < keys.length; i++)
    if(skus_colorcode[keys[i]] === "9620") {
        key = keys[i];
        break;
    }

// The right key is into the "key" variable
console.log(key); // says "HT2787Z2UK"
var keys=Object.getOwnPropertyNames(skus\u colorcode),key;
对于(变量i=0;i
您可以使用Jquery:

var skus_colorcode = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}


$.each( skus_colorcode , function( key, value ) {
   if(value == '9620')
       alert(key);
});
您可以使用Jquery:

var skus_colorcode = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}


$.each( skus_colorcode , function( key, value ) {
   if(value == '9620')
       alert(key);
});
这应该是

   var obj = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}

for (var key of obj) {
  if (obj[key] == "9620"){
     return key;
  }
}

return false
这应该是

   var obj = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}

for (var key of obj) {
  if (obj[key] == "9620"){
     return key;
  }
}

return false
我同意“hemnath mouli”代码应该如他所写:

<script type="text/javascript">
    keys = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"};
    function getIndexOf(obj,value){
        var count = 0;
        for (var i in obj){
            if(obj[i] == value.toString()){
                return  "index[" + count + "]:" + obj[i]  + " = " + i;
                //return what you want
            }
            count ++;
        }
    }
</script>

键={HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”};
函数getIndexOf(对象,值){
var计数=0;
用于(obj中的var i){
if(obj[i]==value.toString()){
返回“index[“+count+”]:“+obj[i]+”=”+i;
//归还你想要的东西
}
计数++;
}
}
然后你得到了价值观

<script type="text/javascript">
    alert(getIndexOf(keys,9621));
</script>

警报(getIndexOf(键,9621));
请您发送一段代码来检索@ClementNerma的值,即使我同意您的看法,但这不是更有效的方法

我只是不想“否决”这个问题

或者,如果要将对象转换为数组:

<script type="text/javascript">
    keys = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"};
    function obj2Array(obj){
        k = [];
        for (var i in obj){
            k.push(obj[i]);
        }
        return k;
    }
</script>

<script type="text/javascript">
    arr = obj2Array(keys);
    alert (arr[2]);
</script>

键={HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”};
函数obj数组(obj){
k=[];
用于(obj中的var i){
k、 推(obj[i]);
}
返回k;
}
arr=obj2数组(键);
警报(arr[2]);
@abu abu

我同意“hemnath mouli”代码应该如他所写:

<script type="text/javascript">
    keys = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"};
    function getIndexOf(obj,value){
        var count = 0;
        for (var i in obj){
            if(obj[i] == value.toString()){
                return  "index[" + count + "]:" + obj[i]  + " = " + i;
                //return what you want
            }
            count ++;
        }
    }
</script>

键={HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”};
函数getIndexOf(对象,值){
var计数=0;
用于(obj中的var i){
if(obj[i]==value.toString()){
返回“index[“+count+”]:“+obj[i]+”=”+i;
//归还你想要的东西
}
计数++;
}
}
然后你得到了价值观

<script type="text/javascript">
    alert(getIndexOf(keys,9621));
</script>

警报(getIndexOf(键,9621));
请您发送一段代码来检索@ClementNerma的值,即使我同意您的看法,但这不是更有效的方法

我只是不想“否决”这个问题

或者,如果要将对象转换为数组:

<script type="text/javascript">
    keys = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"};
    function obj2Array(obj){
        k = [];
        for (var i in obj){
            k.push(obj[i]);
        }
        return k;
    }
</script>

<script type="text/javascript">
    arr = obj2Array(keys);
    alert (arr[2]);
</script>

键={HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”};
函数obj数组(obj){
k=[];
用于(obj中的var i){
k、 推(obj[i]);
}
返回k;
}
arr=obj2数组(键);
警报(arr[2]);

@abu abu

.indexOf
只查看数字索引。数组已填充非数字属性,这些属性将被忽略。所以问题是为什么一开始就用这种方式使用数组。那不是数组…这是无效的数组语法。如果您将其修改为一个对象,您可以使用ES6方法来获取键:
object.entries(skus\u colorcode).find(a=>a[1]==“9620”)[0]
。我认为OP已经足够清楚地表明,所显示的语法是控制台的输出,不需要将数据表示为有效的JS语法。我认为这一定是一个对象,而不是一个数组
.indexOf
只查看数值索引。数组已填充非数字属性,这些属性将被忽略。所以问题是为什么一开始就用这种方式使用数组。那不是数组…这是无效的数组语法。如果您将其修改为一个对象,您可以使用ES6方法来获取键:
object.entries(skus\u colorcode).find(a=>a[1]==“9620”)[0]
。我认为OP已经足够清楚地表明,所显示的语法是控制台的输出,不需要将数据表示为有效的JS语法。我认为这一定是一个对象,而不是一个数组!数组可以包含非数字键,并且完全有效。显示的语法不是有效的初始值设定项,但这显然不是OP用于构造数组的实际语法。在我的浏览器(最新版本的Chrome)上,数组导致语法错误“…显示的语法不是有效的初始值设定项,但这显然不是OP用于构造数组的实际语法”
var a=[];a、 foo=“bar”;console.log(a.foo);//bar
是的,这种语法有效,但问题中给出的数组无效:[HT2787UK:“9618”、HT2787Z1UK:“9619”、HT2787Z3UK:“9621”、HT2787Z2UK:“9620”],数组只接受数字索引,其他索引必须使用对象。数组可以包含非数字键,并且完全有效。显示的语法不是有效的初始值设定项,但这显然不是OP用于构造数组的实际语法。在我的浏览器(最新版本的Chrome)上,数组导致语法错误“…显示的语法不是有效的初始值设定项,但这显然不是OP用于构造数组的实际语法”
var a=[];a、 foo=“bar”;console.log(a.foo);//bar
是的,该语法有效,但给定的数组无效