1

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

我的意思是这样的:

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;

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

4

2 回答 2

2

如前所述,Arrays 和Objects 是不同的。我并不真正遵循您从一种结构转换为另一种结构的推理,您可能应该考虑以不同的方式工作,这完全可以从您的问题和评论描述中获得。但是,如果你真的必须转换,那么你将需要执行某种映射,往返,以确保正确排序。你可以做这样的事情。

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 上

使用 ECMA5Array.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 上

于 2013-06-26T17:27:32.273 回答
2

不。

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

for (var prop in myObj) {
  console.log("myObj.prop -> ", myObj[prop]);
}
于 2013-06-26T16:45:03.133 回答