访问像矩阵一样的javaScript对象数组

时间:2013-06-26 16:37:04

标签: javascript json javascript-objects

是否可以将对象的属性访问到像矩阵这样的对象数组中?

我的意思是这样的:

jSon生成的对象:

[
    {
        "Nome": "1",
        "Departamento": "1",
        "Cargo": "1"
    },
    {
        "Nome": "5",
        "Departamento": "5",
        "Cargo": "5"
    },
    {
        "Nome": "2",
        "Departamento": "2",
        "Cargo": "2"
    },
    {
        "Nome": "3",
        "Departamento": "33",
        "Cargo": "33"
    },
    {
        "Nome": "4",
        "Departamento": "4",
        "Cargo": "4"
    }
]

我如何尝试访问对象属性:

object[0][1] = value;

我已做的事情:

object[0]["Nome"] = value;

我搜索了很多,但我找不到解决这个问题的方法。

2 个答案:

答案 0 :(得分:2)

没有

对象和数组是JavaScript中两种非常不同的类型。在数组中,顺序非常重要,但对象键不保留顺序。请记住,您仍然可以迭代对象的键。

for (var prop in myObj) {
  console.log("myObj.prop -> ", myObj[prop]);
}

答案 1 :(得分:2)

如前所述,ArrayObject不同。我并没有真正按照你的推理从一个结构转换到另一个结构,你应该考虑以不同的方式工作,这完全可以从你的问题和评论描述。但是,如果你真的必须转换,那么你需要执行某种映射,来确保事情的正确排序。你可以这样做。

的Javascript

function toMapped (array) {
    var mapping = {
            "Nome": 0,
            "Departamento": 1,
            "Cargo": 2
        },
        mapped = [],
        length = array.length,
        i = 0,
        element,
        j;

    while (i < length ) {
        element = [];

        for (j in mapping) {
            if (mapping.hasOwnProperty(j) && array[i].hasOwnProperty(j)) {
                element[mapping[j]] = array[i][j];
            }
        }

        mapped.push(element);
        i += 1;
    }

    return mapped;
}

function fromMapped (array) {
    var mapping = {
            0: "Nome",
            1: "Departamento",
            2: "Cargo"
        },
        mapped = [],
        length = array.length,
        i = 0,
        object,
        j;

    while (i < length ) {
        object = {};
        for (j in mapping) {
            if (mapping.hasOwnProperty(j) && array[i].hasOwnProperty(j)) {
                object[mapping[j]] = array[i][j];
            }
        }

        mapped.push(object);
        i += 1;
    }

    return mapped;
}

var test = [{
    "Nome": "1",
    "Departamento": "1",
    "Cargo": "1"
}, {
    "Nome": "5",
    "Departamento": "5",
    "Cargo": "5"
}, {
    "Nome": "2",
    "Departamento": "2",
    "Cargo": "2"
}, {
    "Nome": "3",
    "Departamento": "33",
    "Cargo": "33"
}, {
    "Nome": "4",
    "Departamento": "4",
    "Cargo": "4"
}];

var mapped = toMapped(test);
var unmapped = fromMapped(mapped);

console.log(test);
console.log(mapped);
console.log(unmapped);

jsfiddle

使用ECMA5 Array.prototype.map

的Javascript

function toMapped(array) {
    var mapping = {
        "Nome": 0,
        "Departamento": 1,
        "Cargo": 2
    };

    return array.map(function (object) {
        var element = [],
            i;

        for (i in mapping) {
            if (mapping.hasOwnProperty(i) && object.hasOwnProperty(i)) {
                element[mapping[i]] = object[i];
            }
        }

        return element;
    });
}

function fromMapped(array) {
    var mapping = {
        0: "Nome",
        1: "Departamento",
        2: "Cargo"
    };

    return array.map(function (element) {
        var object = {},
            i;

        for (i in mapping) {
            if (mapping.hasOwnProperty(i) && element.hasOwnProperty(i)) {
                object[mapping[i]] = element[i];
            }
        }

        return object;
    });
}

var test = [{
    "Nome": "1",
        "Departamento": "1",
        "Cargo": "1"
}, {
    "Nome": "5",
        "Departamento": "5",
        "Cargo": "5"
}, {
    "Nome": "2",
        "Departamento": "2",
        "Cargo": "2"
}, {
    "Nome": "3",
        "Departamento": "33",
        "Cargo": "33"
}, {
    "Nome": "4",
        "Departamento": "4",
        "Cargo": "4"
}];

var mapped = toMapped(test);
var unmapped = fromMapped(mapped);

console.log(test);
console.log(mapped);
console.log(unmapped);

jsfiddle