在数组中找到匹配的对象位置

时间:2020-02-24 10:19:58

标签: javascript html arrays object

以下问题:

我有一个数组:

var klassen = new Array();

klassen[0] = new Object();
klassen[0]["class"] = "barbarian";
klassen[0]["con"] = "0";
klassen[0]["str"] = "0";

klassen[1] = new Object();
klassen[1]["class"] = "bard";
klassen[1]["chr"] = "0";
klassen[1]["dex"] = "0"; '''

我有一个功能:

function changecs(){
    let csclass = document.getElementById("class")
    window.finden = csclass.value;
    alert(finden);

    highlight();
}
function highlight(){
    alert(finden);
    let indexzahl = klassen.indexOf('finden')
    alert (indexzahl);
}

此功能链接到HTML选择(我包括了必要的内容:

 <div id="class-frm">
        <label for="class">Choose a Class</label>
            <select id="class" onchange="changecs()">
                <option id="default" value="default"> Optional </option>
                <option id="barbarian" value="barbarian"> Barbarian </option>
                <option id="bard" value="bard"> Bard </option>

我的目标是选择例如吟游诗人。然后我想知道在该示例中“ bard”的索引号将为1。我希望这足够精确。 谢谢!

2 个答案:

答案 0 :(得分:0)

for(let i=0; i<klassen.length; i++){
    const element = klassen[i];
    const keys = Object.keys(element);
    keys.forEach(key => {
        if(element[key] === 'bard'){
            console.log(klassen.indexOf(element))
        }
    });
    // you can use a flag and break here
}

答案 1 :(得分:0)

使用Array.prototype.fineIndex()

const klassen = [{'class': 'barbarian', con: 0, str: 0}, {'class': 'bard', chr: 0, dex: 0}]

function changecs({target:{value}}){
  const itemPosition = klassen.findIndex(item => item.class == value)
  console.log(itemPosition)
}
<label for="class">Choose a Class</label>
    <select id="class" onchange="changecs(event)">
        <option id="default" value="default"> Optional </option>
        <option id="barbarian" value="barbarian"> Barbarian </option>
        <option id="bard" value="bard"> Bard </option>
    </select>