如何查找具有指定名称的属性并添加新属性?

时间:2013-08-05 18:40:24

标签: javascript object properties

如何查找具有指定名称的属性并使用新属性附加所有者对象?

我有这样的数据结构:

var factoryOptions = {
            background: {
                src: 'images/background.png',
                width: 4800,
                height: 3200
            },
            player: {
                sprite: {
                    src: 'images/tanks/superTank.ss.png',
                    frameTime: 10,
                    frameCount: 3
                },
                width: 54,
                height: 32
            },
            tanks: {
                light: {
                    sprite: {
                        src: 'images/tanks/lightTank.png',
                        frameTime: 100,
                        frameCount: 1
                    },
                    width: 32,
                    height: 32
                },
                medium: {
                    sprite: {
                        src: 'images/tanks/mediumTank.png',
                        frameTime: 10,
                        frameCount: 1
                    },
                    width: 46,
                    height: 46
                },
                heavy: {
                    sprite: {
                        src: 'images/tanks/heavyTank.png',
                        frameTime: 10,
                        frameCount: 1
                    },
                    width: 64,
                    height: 64
                }
            }
        }
    }

我想找到所有属性“src”并通过使用此src添加图像来修改所有者对象,因此最终结果应如下所示:

var factoryOptions = {
            background: {
                src: 'images/background.png',
                width: 4800,
                height: 3200,
                image: new Image()
            },
            player: {
                sprite: {
                    src: 'images/tanks/superTank.ss.png',
                    frameTime: 10,
                    frameCount: 3,
                    image: new Image()
                },
                width: 54,
                height: 32
            },
            tanks: {
                light: {
                    sprite: {
                        src: 'images/tanks/lightTank.png',
                        frameTime: 100,
                        frameCount: 1,
                        image: new Image()
                    },
                    width: 32,
                    height: 32
                },
                medium: {
                    sprite: {
                        src: 'images/tanks/mediumTank.png',
                        frameTime: 10,
                        frameCount: 1,
                        image: new Image()
                    },
                    width: 46,
                    height: 46
                },
                heavy: {
                    sprite: {
                        src: 'images/tanks/heavyTank.png',
                        image: new Image(),
                        frameTime: 10,
                        frameCount: 1
                    },
                    width: 64,
                    height: 64
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

function deepSrc(obj){
    for (var i in obj){
        if (i == 'src'){
            obj.image = new Image();
        }
        else if (typeof obj[i] == 'object'){
            deepSrc(obj[i]);
        }
    }
}
deepSrc(factoryOptions);

答案 1 :(得分:-1)

这可以解决问题:

function addImg(obj) {

    if (obj.hasOwnProperty("src")) {
        obj.image = new Image();
    }

    for (prop in obj) {
        if (typeof obj[prop] === "object") {
            addImg(obj[prop]);
        }
    }
}