javascript - 遍历对象数组以获取值
问题描述
我发出了一个 http 请求以从表中提取一列数据。在提取此数据后,我在尝试迭代对象内部的对象数组时遇到问题。Array.from()
我尝试使用and将对象转换为数组split()
,但这会返回对象内的每个字符,并用空格分隔。如何遍历主对象内的这个对象数组以获取每个名为“value”的键字段的值?
这是我根据请求提取的对象:
0: "{"
data ":[{"
8 ":{"
value ":"
644 Lucon Road Back Warehouse, Schwenksville, North Dakota 58963 "}},{"
8 ":{"
value ":"
5689 Henkels Lane Suite 504, Annapolis Junction, New Jersey 58963 "}},{"
8 ":{"
value ":"
2563 Dickerson Pike Suite 105, Nashville, North Dakota 58963 "}},{"
8 ":{"
value ":"
123 Country Lane, Prosperity, North Dakota 58963 "}},{"
8 ":{"
value ":"
896 Cember Way Suite A, Summerville, North Carolina 58963 "}},{"
8 ":{"
value ":"
1125 NW 97 th Avenue, Doral, Texas 58963 "}},{"
8 ":{"
value ":"
896 Hill Avenue Suite C, Toledo, Alabama 58963 "}},{"
8 ":{"
value ":"
2101 Pleasant Valley Lane Suite B, Arlington, Texas 58963 "}},{"
8 ":{"
value ":"
1000 S Marietta Parkway SE Suite 105, Marietta, Timbuktu 35896 "}},{"
8 ":{"
value ":"
1258 103 rd Street Suite 127, Jacksonville, Texas 35896 "}},{"
8 ":{"
value ":"
9856 Corporate Drive North Suite 201, Mobile, Maryland 58963 "}},{"
8 ":{"
value ":"
9563 Leah Drive Unit 1, Hillsborough, North Dakota 25896 "}},{"
8 ":{"
value ":"
5689 Brookshire Road Unit D, Greer, North Dakota 58963 "}},{"
8 ":{"
value ":"
1587 Kessler Avenue Suite 301, Schulenburg, Arizona 58963 "}},{"
8 ":{"
value ":"
fields ":[{"
id ":8,"
label ":"
Address ","
type ":"
address "}],"
metadata ":{"
numFields ":1,"
numRecords ":15,"
skip ":0,"
totalRecords ":15}}"
这是我的要求:
const headers = {
'QB-Realm-Hostname': 'xxxxx.quickbase.com',
'Authorization': 'QB-USER-TOKEN xxxxxxxxxxxxxxxxxxxxxxxxxxx',
'Content-Type': 'application/json'
}
const body = {
"from": "bn6rb5ll9",
"select": [8],
"options": {
"skip": 0,
"top": 0
}
}
const xmlHttp = new XMLHttpRequest();
xmlHttp.open('POST', 'https://api.quickbase.com/v1/records/query', true);
for (const key in headers) {
xmlHttp.setRequestHeader(key, headers[key]);
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState === XMLHttpRequest.DONE) {
let jsonObject = xmlHttp.responseText.split();
console.log(jsonObject);
// for (let i = 0; i <= jsonObject.length; i++) {
// console.log((jsonObject[i]));
// }
// const propValues = Object.values(xmlHttp.responseText);
// console.log(propValues);
}
};
xmlHttp.send(JSON.stringify(body));
这是我使用时得到的响应Array.from(xmlHttpResponseText)
(1242) ["{", """, "d", "a", "t", "a", """, ":", "[", "{", """, "8", """, ":", "{", """, "v", "a", "l", "u", "e", """, ":", """, "2", "0", "3", "3", " ", "L", "u", "c", "o", "n", " ", "R", "o", "a", "d", " ", "B", "a", "c", "k", " ", "W", "a", "r", "e", "h", "o", "u", "s", "e", ",", " ", "S", "c", "h", "w", "e", "n", "k", "s", "v", "i", "l", "l", "e", ",", " ", "P", "e", "n", "n", "s", "y", "l", "v", "a", "n", "i", "a", " ", "1", "9", "4", "7", "3", """, "}", "}", ",", "{", """, "8", """, ":", "{", """, …]
我使用了 JSON.parse(xmlHttp.responseText) 并且确实设法获得了 typeof 数组,但我没有看到任何可用于该数组的数组方法。
解决方案
如前所述,您的有效负载不是有效格式,因此我将以您从 Array.from(xmlHttpResponseText) 获得的文本为基础。
首先,如果您的有效负载是 JSON,您必须将其处理为 json 而不是文本行:
let jsonObject = JSON.parse(xmlHttp.responseText);
其次,从数据中我猜你想要做的是从结构中提取地址。我们将使用 Array.map 遍历每个数据条目,并提取属性 8.value :
const addresses=jsonObject.data.map(e=>e["8"].value);
然后你会得到一个字符串数组,它们是你的地址,你可以登录控制台,或者做任何你想做的事情:
console.log(addresses);
推荐阅读
- ios - 带有属性字符串的 UIPickerView
- google-distancematrix-api - 在 VBA 中接收来自 Google-DistanceMatrix api 的“Invalid_Request”响应
- javascript - 角度 5:从不工作的对象设置(点击)值
- python - 为什么 pyenv 声明一个版本没有安装,尽管它确实存在?
- google-cloud-pubsub - 在 Google Pubsub 上优先发送消息
- ios - isIdleTimerDisabled 在 iOS 12 中不起作用
- javascript - 在 Node.js 中将 64 位有符号整数转换为 16 字节缓冲区
- node.js - 如何判断 XML 解析器是否已完成文件解析?
- node.js - 为什么并发 lambda 请求延迟启动?
- angular - Angular 发布 - 在 package.json 中放置硬编码版本或 github 链接?