たとえば、私はこの配列を持っています:
$scope.records = [
{
"Name" : "Alfreds Futterkiste",
"Country" : "Germany"
},
{
"Name" : "Berglunds snabbköp",
"Country" : "Sweden"
},
{
"Name" : "Centro comercial Moctezuma",
"Country" : "Mexico"
},
{
"Name" : "Ernst Handel",
"Country" : "Austria"
}
];
オブジェクトから値インデックスを取得する方法は?例「国」:「オーストリア」の場合、このインデックスは3です
Array.findIndex
最新のブラウザでは、Internet Explorerではサポートされていません。Edgeのみ
let $scope = {};
$scope.records = [
{
"Name" : "Alfreds Futterkiste",
"Country" : "Germany"
},
{
"Name" : "Berglunds snabbköp",
"Country" : "Sweden"
},
{
"Name" : "Centro comercial Moctezuma",
"Country" : "Mexico"
},
{
"Name" : "Ernst Handel",
"Country" : "Austria"
}
];
let index = $scope.records.findIndex( record => record.Country === "Austria" );
console.log(index); // 3
IE9以降でサポートするには、Array.some
代わりに
var $scope = {};
$scope.records = [{
"Name": "Alfreds Futterkiste",
"Country": "Germany"
}, {
"Name": "Berglunds snabbköp",
"Country": "Sweden"
}, {
"Name": "Centro comercial Moctezuma",
"Country": "Mexico"
}, {
"Name": "Ernst Handel",
"Country": "Austria"
}];
var index = -1;
$scope.records.some(function(obj, i) {
return obj.Country === "Austria" ? index = i : false;
});
console.log(index);
これにはarray.findIndex
を使用できます。
var d = [{
"Name": "Alfreds Futterkiste",
"Country": "Germany"
}, {
"Name": "Berglunds snabbköp",
"Country": "Sweden"
}, {
"Name": "Centro comercial Moctezuma",
"Country": "Mexico"
}, {
"Name": "Ernst Handel",
"Country": "Austria"
}];
var searchCountry = "Austria"
var index = d.findIndex(x=>x.Country === searchCountry)
console.log(index)
注: array.findIndex はES6の一部です。
Use findIndex method -
var index = $scope.records.findIndex(x=>x.Country==='Austria')
function getIndexByCountryName(country)
var found = $scope.records.find(function(item){return item.Country === country});
return $scope.records.indexOf(found);
}
国を返し、国を見つけることができます。
$scope.records.map((item) => { return item.Country;}).indexOf('Austria')
上記のコードの問題は、各要素を1回繰り返してマップを生成し、インデックスを見つけます。単純なforループを使用できます。
var index = (arr, k, v) => {
var i = -1;len = (arr || []).length;
for (i = 0; i < len; i++) {
if (arr[i][k] === v)
return i;
}
return -1;
}
多くのfindIndexソリューションに気付きました。注:FindIndexメソッドはECMAScript 6仕様に追加されており、MDNによってはすべてのJavaScript実装で利用できない場合があります。
FindIndex( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex )のポリフィルを使用し、他の提案された。ポリフィルを使用したくない場合は、ソリューションとして配置したマップとindexOfを使用できます。
JSON配列であるfor-inループを使用すると、これを行うことができます
for(i in records) {
if(records[i].country=="Austria")
console.log("index is :"+ parseInt(i)); // print index
}
私はこの方法を登録しました、そしてそれは魅力のように働きます、
Array.prototype.getIndexByValue = function (name, value) {
for (var i = 0, len=this.length; i <len; i++) {
if (this[i][name]) {
if (this[i][name] === value) {
return i
}
}
}
return -1;
};
var d = [{
"Name": "Alfreds Futterkiste",
"Country": "Germany"
}, {
"Name": "Berglunds snabbköp",
"Country": "Sweden"
}, {
"Name": "Centro comercial Moctezuma",
"Country": "Mexico"
}, {
"Name": "Ernst Handel",
"Country": "Austria"
}];
var index = d.getIndexByValue('Country','Austria');
console.log(index)//will print 3