包含属性的数组中的IndexOf

时间:2015-09-18 17:38:20

标签: javascript angularjs indexof

我的问题不同:

我正在使用angular / Javacript,我想知道数组中是否存在值。这是我的代码:

    var source = [1, 2, 3 , 4 , 5]; 
    var cities = [{ city: 4 }, { city: 6 }, { city: 8 }]; 

    angular.forEach(source, function (value, key) { 
    if (cities["city"].indexOf(value) != -1) { 
         console.log(value+ " exist"); } 
   else{ console.log(value+ " not exist"); }
 });

但是城市[“城市”]并未定义。有帮助吗?

4 个答案:

答案 0 :(得分:0)

由于它是一个数组,您需要使用索引来访问该元素,如下所示:

var firstCity = cities[0];
console.log(firstCity["city"]);

答案 1 :(得分:0)

如果是javascript,ECMAScript 6将包含一个array.find方法,但是对于旧版本,你只需要遍历城市并使用cities [n] .city == 8来测试每个城市。 / p>

答案 2 :(得分:0)

您的cities数组包含3个元素。 您必须遍历它们并检查它们中是否包含您要查找的值。 假设你正在使用javascript,因为console.log,你可以这样做。

cities["city"]未定义,因为cities是一个仅包含0,1和2作为索引的数组(cities[0]cities[1]cities[2])。 这三个是具有索引"city"的那些,例如,cities[0]["city"]

var source = [1,2,3,4,5];
for (var i = 0; i < source.length; i++) {

   var found = false;
   for (var j = 0; j < cities.length; j++) {
      if (cities[j]["city"] === i) {
          found = true;
      }
   }
   if (found) {
      console.log(i + " exists");
   } else {
      console.log(i + " not exists");
   }
}

答案 3 :(得分:0)

我建议用对象迭代数组。

var source = [1, 2, 3, 4, 5];
var cities = [{ city: 4 }, { city: 6 }, { city: 8 }];

source.forEach(function (a) {
    if (cities.some(function (aa) { return aa.city === a; })) {
        document.write(a + ' exist<br>');
    } else {
        document.write(a + ' does not exist<br>');
    }
});

奖金:根据原始问题,使用Array.prototype.indexOf的一些想法。

var city42 = { city: 42 };
var cities = [{ city: 4 }, { city: 6 }, { city: 8 }, city42];
document.write(cities.indexOf({ city: 8 }) + '<br>'); // -1 does not work
document.write(cities.indexOf(city42) + '<br>'); // 3 does work

var index = -1;
cities.some(function (a, i) {
    return a.city === 8 && ~(index = i);
});
document.write(index + '<br>'); // 2