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

Acessing javaScript array of objects like a matrix

本文关键字:对象 访问 javaScript 数组 一样      更新时间:2023-09-26

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

我的意思是:

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;

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

否。

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

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

如前所述,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

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