{ "data": { "question": { "questionId": "2769", "questionFrontendId": "2675", "categoryTitle": "JavaScript", "boundTopicId": 2267107, "title": "Array of Objects to Matrix", "titleSlug": "array-of-objects-to-matrix", "content": "

Write a function that converts an array of objects arr into a matrix m.

\n\n

arr is an array of objects or arrays. Each item in the array can be deeply nested with child arrays and child objects. It can also contain numbers, strings, booleans, and null values.

\n\n

The first row m should be the column names. If there is no nesting, the column names are the unique keys within the objects. If there is nesting, the column names are the respective paths in the object separated by ".".

\n\n

Each of the remaining rows corresponds to an object in arr. Each value in the matrix corresponds to a value in an object. If a given object doesn't contain a value for a given column, the cell should contain an empty string "".

\n\n

The colums in the matrix should be in lexographically ascending order.

\n\n

 

\n

Example 1:

\n\n
\nInput: \narr = [\n  {"b": 1, "a": 2},\n  {"b": 3, "a": 4}\n]\nOutput: \n[\n  ["a", "b"],\n  [2, 1],\n  [4, 3]\n]\n\nExplanation:\nThere are two unique column names in the two objects: "a" and "b".\n"a" corresponds with [2, 4].\n"b" coresponds with [1, 3].\n
\n\n

Example 2:

\n\n
\nInput: \narr = [\n  {"a": 1, "b": 2},\n  {"c": 3, "d": 4},\n  {}\n]\nOutput: \n[\n  ["a", "b", "c", "d"],\n  [1, 2, "", ""],\n  ["", "", 3, 4],\n  ["", "", "", ""]\n]\n\nExplanation:\nThere are 4 unique column names: "a", "b", "c", "d".\nThe first object has values associated with "a" and "b".\nThe second object has values associated with "c" and "d".\nThe third object has no keys, so it is just a row of empty strings.\n
\n\n

Example 3:

\n\n
\nInput: \narr = [\n  {"a": {"b": 1, "c": 2}},\n  {"a": {"b": 3, "d": 4}}\n]\nOutput: \n[\n  ["a.b", "a.c", "a.d"],\n  [1, 2, ""],\n  [3, "", 4]\n]\n\nExplanation:\nIn this example, the objects are nested. The keys represent the full path to each value separated by periods.\nThere are three paths: "a.b", "a.c", "a.d".\n
\n\n

Example 4:

\n\n
\nInput: \narr = [\n  [{"a": null}],\n  [{"b": true}],\n  [{"c": "x"}]\n]\nOutput: \n[\n  ["0.a", "0.b", "0.c"],\n  [null, "", ""],\n  ["", true, ""],\n  ["", "", "x"]\n]\n\nExplanation:\nArrays are also considered objects with their keys being their indices.\nEach array has one element so the keys are "0.a", "0.b", and "0.c".\n
\n\n

Example 5:

\n\n
\nInput: \narr = [\n  {},\n  {},\n  {},\n]\nOutput: \n[\n  [],\n  [],\n  [],\n  []\n]\n\nExplanation:\nThere are no keys so every row is an empty array.
\n\n

 

\n

Constraints:

\n\n\n", "translatedTitle": "将对象数组转换为矩阵", "translatedContent": "

编写一个函数,将对象数组 arr 转换为矩阵 m 。

\n\n

arr 是一个由对象组成的数组或一个数组。数组中的每个项都可以包含深层嵌套的子数组和子对象。它还可以包含数字、字符串、布尔值和空值。

\n\n

矩阵 m 的第一行应该是列名。如果没有嵌套,列名是对象中的唯一键。如果存在嵌套,列名是对象中相应路径,以点号 \".\" 分隔。

\n\n

剩余的每一行对应 arr 中的一个对象。矩阵中的每个值对应对象中的一个值。如果给定对象在给定列中没有值,则应该包含空字符串 \"\"

\n\n

矩阵中的列应按 字典升序 排列。

\n\n

 

\n\n

示例 1:

\n\n
\n输入:\narr = [\n  {\"b\": 1, \"a\": 2},\n  {\"b\": 3, \"a\": 4}\n]\n输出:\n[\n  [\"a\", \"b\"],\n  [2, 1],\n  [4, 3]\n]\n\n解释:\n两个对象中有两个唯一的列名:\"a\"和\"b\"。 \n\"a\"对应[2, 4]。 \n\"b\"对应[1, 3]。\n
\n\n

示例 2:

\n\n
\n输入:\narr = [\n  {\"a\": 1, \"b\": 2},\n  {\"c\": 3, \"d\": 4},\n  {}\n]\n输出:\n[\n  [\"a\", \"b\", \"c\", \"d\"],\n  [1, 2, \"\", \"\"],\n  [\"\", \"\", 3, 4],\n  [\"\", \"\", \"\", \"\"]\n]\n\n解释:\n有四个唯一的列名:\"a\"、\"b\"、\"c\"、\"d\"。 \n 第一个对象具有与\"a\"和\"b\"关联的值。 \n第二个对象具有与\"c\"和\"d\"关联的值。 \n第三个对象没有键,因此只是一行空字符串。\n
\n\n

示例 3:

\n\n
\n输入:\narr = [\n  {\"a\": {\"b\": 1, \"c\": 2}},\n  {\"a\": {\"b\": 3, \"d\": 4}}\n]\n输出:\n[\n  [\"a.b\", \"a.c\", \"a.d\"],\n  [1, 2, \"\"],\n  [3, \"\", 4]\n]\n\n解释:\n在这个例子中,对象是嵌套的。键表示每个值的完整路径,路径之间用句点分隔。 \n有三个路径:\"a.b\"、\"a.c\"、\"a.d\"。\n
\n\n

示例 4:

\n\n
\n输入:\narr = [\n  [{\"a\": null}],\n  [{\"b\": true}],\n  [{\"c\": \"x\"}]\n]\n输出: \n[\n  [\"0.a\", \"0.b\", \"0.c\"],\n  [null, \"\", \"\"],\n  [\"\", true, \"\"],\n  [\"\", \"\", \"x\"]\n]\n\n解释:\n数组也被视为具有索引为键的对象。 \n每个数组只有一个元素,所以键是\"0.a\"、\"0.b\"和\"0.c\"。\n
\n\n

示例 5:

\n\n
\n输入:\narr = [\n  {},\n  {},\n  {},\n]\n输出:\n[\n  [],\n  [],\n  [],\n  []\n]\n\n解释:\n没有键,所以每一行都是一个空数组。
\n\n

 

\n\n

提示:

\n\n\n", "isPaidOnly": false, "difficulty": "Medium", "likes": 0, "dislikes": 0, "isLiked": null, "similarQuestions": "[]", "contributors": [], "langToValidPlayground": "{\"cpp\": true, \"java\": true, \"python\": true, \"python3\": true, \"mysql\": false, \"mssql\": false, \"oraclesql\": false, \"c\": false, \"csharp\": false, \"javascript\": false, \"ruby\": false, \"bash\": false, \"swift\": false, \"golang\": false, \"scala\": false, \"html\": false, \"pythonml\": false, \"kotlin\": false, \"rust\": false, \"php\": false, \"typescript\": false, \"racket\": false, \"erlang\": false, \"elixir\": false, \"dart\": false}", "topicTags": [], "companyTagStats": null, "codeSnippets": [ { "lang": "JavaScript", "langSlug": "javascript", "code": "/**\n * @param {Array} arr\n * @return {Matrix}\n */\nvar jsonToMatrix = function(arr) {\n \n};", "__typename": "CodeSnippetNode" }, { "lang": "TypeScript", "langSlug": "typescript", "code": "function jsonToMatrix(arr: any[]): (string | number | boolean | null)[] {\n\n};", "__typename": "CodeSnippetNode" } ], "stats": "{\"totalAccepted\": \"54\", \"totalSubmission\": \"86\", \"totalAcceptedRaw\": 54, \"totalSubmissionRaw\": 86, \"acRate\": \"62.8%\"}", "hints": [ "How could you split the problem up into sub-problems?", "1.) Write a function that converts a single object into a dictionary that maps the path name to values. You can solve this recursively by keeping track of current path list.", "2.) Write a function that converts a list of dictionaries into a matrix. Start by creating a list of all possible paths in any of the dictionaries. This will represent the columns." ], "solution": null, "status": null, "sampleTestCase": "[{\"b\":1,\"a\":2},{\"b\":3,\"a\":4}]", "metaData": "{\n \"name\": \"jsonToMatrix\",\n \"params\": [\n {\n \"name\": \"arr\",\n \"type\": \"string\"\n }\n ],\n \"return\": {\n \"type\": \"string\"\n },\n \"languages\": [\n \"typescript\",\n \"javascript\"\n ],\n \"manual\": true\n}", "judgerAvailable": true, "judgeType": "large", "mysqlSchemas": [], "enableRunCode": true, "envInfo": "{\"javascript\":[\"JavaScript\",\"

\\u7248\\u672c\\uff1aNode.js 16.13.2<\\/code><\\/p>\\r\\n\\r\\n

\\u60a8\\u7684\\u4ee3\\u7801\\u5728\\u6267\\u884c\\u65f6\\u5c06\\u5e26\\u4e0a --harmony<\\/code> \\u6807\\u8bb0\\u6765\\u5f00\\u542f \\u65b0\\u7248ES6\\u7279\\u6027<\\/a>\\u3002<\\/p>\\r\\n\\r\\n

lodash.js<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n

\\u5982\\u9700\\u4f7f\\u7528\\u961f\\u5217\\/\\u4f18\\u5148\\u961f\\u5217\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 datastructures-js\\/priority-queue@5.3.0<\\/a> \\u548c datastructures-js\\/queue@4.2.1<\\/a>\\u3002<\\/p>\"],\"typescript\":[\"TypeScript\",\"

TypeScript 4.5.4<\\/p>\\r\\n\\r\\n

Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2020<\\/p>\\r\\n\\r\\n

lodash.js<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n

\\u5982\\u9700\\u4f7f\\u7528\\u961f\\u5217\\/\\u4f18\\u5148\\u961f\\u5217\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 datastructures-js\\/priority-queue@5.3.0<\\/a> \\u548c datastructures-js\\/queue@4.2.1<\\/a>\\u3002<\\/p>\"]}", "book": null, "isSubscribed": false, "isDailyQuestion": false, "dailyRecordStatus": null, "editorType": "CKEDITOR", "ugcQuestionId": null, "style": "LEETCODE", "exampleTestcases": "[{\"b\":1,\"a\":2},{\"b\":3,\"a\":4}]\n[{\"a\":1,\"b\":2},{\"c\":3,\"d\":4},{}]\n[{\"a\":{\"b\":1,\"c\":2}},{\"a\":{\"b\":3,\"d\":4}}]\n[[{\"a\":null}],[{\"b\":true}],[{\"c\":\"x\"}]]\n[{},{},{}]", "__typename": "QuestionNode" } } }