首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取数组中对象在数组中对象的索引

获取数组中对象在数组中对象的索引
EN

Stack Overflow用户
提问于 2014-04-03 14:50:00
回答 4查看 133关注 0票数 0

使用Impactjs,一个游戏引擎,这里和级别有一个非常奇怪的设置:

代码语言:javascript
复制
[
    {
       "entities": [
            {"type":"type1","x":100,"y":100,"settings":{"directsTo":"-5"}},
            {"type":"type2","x":101,"y":101,"settings":{"directsTo":"-4"}}
        ],
        "layer": [
            other data
         ]
    }
]

我想知道如何根据设置对象的directsTo属性来获取type1对象的索引?

Javascript或jQuery就可以了。

编辑:游戏必须在移动设备上流畅工作,所以有一个有效的解决方案是很好的。

EN

回答 4

Stack Overflow用户

发布于 2014-04-03 15:07:21

尝尝这个,

代码语言:javascript
复制
var arr =[{
    "entities": [{
        "type": "type1",
        "x": 100,"y": 100,
        "settings": {"directsTo": "-5"}
    }, {
        "type": "type2",
        "x": 101,"y": 101,
        "settings": {"directsTo": "-4"}
    }],
    "layer": ['other data']
}];
var t='type1';
var newArr=arr[0];
for(var data in newArr){
    for(a in newArr[data]){
        if(newArr[data][a].type == t){
             alert('Index of '+t+' is '+a+' in '+data);
        }
    }
}

Live Demo

Updated demo

票数 1
EN

Stack Overflow用户

发布于 2014-04-03 15:02:21

可以使用filter属性吗?

假设您的JS对象如下所示

代码语言:javascript
复制
var j = [
    {
       "entities": [
            {"type":"type1","x":100,"y":100,"settings":{"directsTo":"-5"}},
            {"type":"type2","x":101,"y":101,"settings":{"directsTo":"-4"}}
        ],
        "layer": [
            "otherdata":{}
         ]
    }
];

您可以使用以下命令查找对象

代码语言:javascript
复制
var result = j[0].entities.filter(function(n) { return n.settings.directsTo == "-5"; });
// result[0].type == "type1"
票数 0
EN

Stack Overflow用户

发布于 2014-04-03 15:08:35

您可以创建一个函数,用于在其他对象中获取某个对象的索引,例如

代码语言:javascript
复制
//assuming you have the data parsed as a JSON object "data"
//and you also have your entity object as "obj"
function getIndex(obj, data){
    return data.entities.indexOf(obj);
}

如果没有"obj“对象,则必须创建一个函数,该函数首先根据属性查找正确的对象,例如type参数

代码语言:javascript
复制
function findEntity(type, source){
    for(var i=0; i<source.entities.length; i++){
        if(source.entities[i].type == type){
            return source.entities[i];
        }
    }
    return false;
}

现在你可以这样叫它

代码语言:javascript
复制
getIndex(findEntity("type1", data), data);

希望它能帮助你开始!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22829920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档