我有一个从本地数据库中提取的数组。
var data = [
['09-08-2017', '62154', 'Approved'],
['09-08-2017', '62155', 'Approved'],
['08-25-2017', '61922', 'Approved'],
['08-25-2017', '61923', 'Approved'],
['08-18-2017', '61949', 'Approved'],
// ...
];
...等等,大约250个不同的条目。
data [0] [0]是工作周的日期,我们每周都对应于一周的星期五。
data [0] [1]是作业编号,每个作业编号都是唯一的,但每周可以有多个作业编号。
data [0] [2]是每个工作状态需要保留相应工作号的工作状态。
我本来要做的是将数组从它的方式转换为一个移位数组,该数组包含与相应作业数据相关的所有作业编号和状态。
可能是这样的事情:
data['09-08-2017'] = ['62154', 'Approved'], ['62155', 'Approved'];
甚至是可能的对象
data['09-08-2017'] = { jobNumber: '62154', jobState: 'Approved' };
但是我甚至不百分之百确定如何初始化这样的东西,而且我甚至不太确定什么是转换它的好方法。我可以提供任何帮助或建议。先感谢您!
修改 我发现为什么我的数组最初格式化得如此奇怪。当我第一次弄清楚如何将数组从php转移到javascript时,我看到有人一直在使用
var data = <?php json_encode(print_r($data)); ?> ;
所以我决定尝试它并且它有效,但显然它给了我一种难以使用的奇怪格式。所以我做了一些研究并将其改为
var data = <?php echo json_encode(array_values($data)); ?>;
现在它可以工作,并且还为我的数组提供了一种更易于操作的格式。
答案 0 :(得分:4)
您可以通过迭代外部数组并使用日期构建数组来转换数组。然后推一个新对象。
@BeforeClass
&#13;
var data = [['09-08-2017', '62154', 'Approved'], ['09-08-2017', '62155', 'Approved'], ['08-25-2017', '61922', 'Approved'], ['08-25-2017', '61923', 'Approved'], ['08-18-2017', '61949', 'Approved']],
object = data.reduce(function (r, a) {
(r[a[0]] = r[a[0]] || []).push({ jobNumber: a[1], jobState: a[2] });
return r;
}, Object.create(null));
console.log(object);
&#13;
答案 1 :(得分:2)
JavaScript没有“关联数组”,它有对象和(从ES2015开始)Map
。
听起来您希望将数组数组转换为具有以日期命名的属性的对象,其值是具有作业编号和状态的对象。如果是,则使用{}
创建对象,例如:
var obj = {};
...并在它们上设置属性,并使用括号表示日期,因为它们不是有效的标识符名称:
obj["09-08-2017"] = {};
您可以使用对象初始值设定项创建从属对象,因此:
obj[entry[0]] = {
jobNumber: entry[1],
jobState: entry[2]
};
但是,您不能拥有该结构,因为同一日期有多个条目。你可能有
{
"08-09-2017": {
12345: "Approved",
67894: "Approved"
}
}
E.g:
var data = [
["09-08-2017", 62154, "Approved"],
["09-08-2017", 12345, "Approved"],
["08-08-2017", 62155, "Approved"]
];
var obj = {};
data.forEach(function(entry) {
var date = entry[0];
if (!obj[date]) {
obj[date] = {};
}
obj[date][entry[1]] = entry[2];
});
console.log(obj);