我正在使用新的 js
包和 dart 2 SDK 围绕 chrome.storage.local.set
编写自定义 dart 与 js 互操作。
Dart 中的 Map
与 JavaScript 中的对象不同,但是强制开发人员在每次想要使用面向公众的 API 时都编写抽象类也是不正确的。
因此,我正在寻找一种将 dart Map 转换为不需要编写抽象类的 JavaScript 对象的方法。
使用 dart:js
很容易将 dart Map 转换为 JS 对象,但是使用新的 js
包我还没有看到任何动态将 dart Map 转换为 js 的示例对象。
最佳答案
已接受答案的略微修改版本,它还处理嵌套 map 。我还添加了一个解决方案,用于转换另一种方式:从 Javascript 对象到 Dart Map。
import 'package:js/js.dart';
import 'package:js/js_util.dart';
Object mapToJsObject(Map map){
var object = newObject();
map.forEach((k, v) {
if (v is Map) {
setProperty(object, k, mapToJsObject(v));
} else {
setProperty(object, k, v);
}
});
return object;
}
Map jsObjectToMap(dynamic jsObject) {
Map result = {};
List keys = _objectKeys(jsObject);
for (dynamic key in keys) {
dynamic value = getProperty(jsObject, key);
List nestedKeys = objectKeys(value);
if ((nestedKeys ?? []).isNotEmpty) {
//nested property
result[key] = jsObjectToMap(value);
} else {
result[key] = value;
}
}
return result;
}
List<String> objectKeys(dynamic jsObject) {
if (jsObject == null || jsObject is String || jsObject is num || jsObject is bool) return null;
return _objectKeys(jsObject);
}
@JS('Object.keys')
external List<String> _objectKeys(jsObject);
关于dart - 将 Dart 2 Map 动态转换为 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804476/