Как преобразовать тип объекта в тип карты (массив) в Dart, поэтому переменные становятся парами ключ/значение?Как преобразовать объект в массив (карту) в Dart?
1
A
ответ
2
/**
* Uses refection (mirrors) to produce a Map (array) from an object's
* variables. Making the variable name the key, and it's value the
* value.
*/
Map objectToMap(Object object)
{
// Mirror the particular instance (rather than the class itself)
InstanceMirror instanceMirror = reflect(object);
Map dataMapped = new Map();
// Mirror the instance's class (type) to get the declarations
for (var declaration in instanceMirror.type.declarations.values)
{
// If declaration is a type of variable, map variable name and value
if (declaration is VariableMirror)
{
String variableName = MirrorSystem.getName(declaration.simpleName);
String variableValue = instanceMirror.getField(declaration.simpleName).reflectee;
dataMapped[variableName] = variableValue;
}
}
return dataMapped;
}
0
Преобразуются рекурсивно любой объект JS к Dart карте, список или скаляр:
/// js_interop.dart
import 'dart:js';
/// Converts the specified JavaScript [value] to a Dart instance.
dynamic convertToDart(value) {
// Value types.
if (value == null) return null;
if (value is bool || value is num || value is DateTime || value is String) return value;
// JsArray.
if (value is Iterable) return value.map(convertToDart).toList();
// JsObject.
return new Map.fromIterable(getKeysOfObject(value), value: (key) => convertToDart(value[key]));
}
/// Gets the enumerable properties of the specified JavaScript [object].
List<String> getKeysOfObject(JsObject object) => (context['Object'] as JsFunction).callMethod('keys', [object]);
Использование:
/// config.js
window.$environment = 'staging';
window.$config = {
name: 'FooBar',
params: {
assets: ['css', 'js'],
forceSsl: true
}
};
/// main.dart
import 'dart:js' as js;
import 'js_interop.dart';
void main() {
var environment = convertToDart(js.context[r'$environment']);
assert(environment is String);
assert(environment == 'staging');
var config = convertToDart(js.context[r'$config']);
assert(config is Map<String, dynamic>);
assert(config.length == 2);
assert(config['name'] is String);
assert(config['name'] == 'FooBar');
assert(config['params'] is Map<String, dynamic>);
assert(config['params'].length == 2);
assert(config['params']['forceSsl'] is bool);
assert(config['params']['forceSsl'] == true);
assert(config['params']['assets'] is List<String>);
assert(config['params']['assets'].length == 2);
assert(config['params']['assets'].first == 'css');
assert(config['params']['assets'].last == 'js');
}
Предостережения: созданный экземпляр не отражает изменения от исходный объект JS. Если вам нужна эта функция, см.: https://stackoverflow.com/a/20720378/1084485
Смежные вопросы
- 1. Как преобразовать массив в карту?
- 2. Как преобразовать простой объект в карту ES6?
- 3. Как преобразовать объект JSON в карту объекта?
- 4. Как преобразовать объект в массив
- 5. Как преобразовать объект в массив?
- 6. Как преобразовать объект в массив?
- 7. Как преобразовать массив в объект?
- 8. Преобразовать массив объектов JSON в Js карту
- 9. Как преобразовать карту javascript массива в json-объект в javascript?
- 10. Как преобразовать объект, содержащий поля DateTime в JSON в Dart?
- 11. Как преобразовать строку UTF-8 в массив байтов в Dart?
- 12. преобразовать карту пользовательского объекта в объект json?
- 13. Как преобразовать объект в массив в vb.net
- 14. Как преобразовать массив в объект в JsonConverter
- 15. Как преобразовать массив в объект в Javascript
- 16. Как преобразовать объект в массив в Javascript
- 17. Как преобразовать массив в объект в Lodash?
- 18. Как преобразовать массив в объект в подчеркивании?
- 19. Как преобразовать объект в массив в JavaScript?
- 20. Как преобразовать список в карту в Дарт
- 21. преобразовать объект json в массив
- 22. Как преобразовать объект класса в шестнадцатеричный массив в java
- 23. Преобразовать Laravel объект в массив
- 24. Underscore.js преобразовать объект в массив
- 25. MongoDB: преобразовать массив в объект
- 26. Как преобразовать карту <объект, объект> в карту <String, String> в java?
- 27. Преобразовать карту в нужную карту
- 28. как преобразовать карту в наборе
- 29. Преобразовать массив строк в объект JSON/Массив
- 30. Javascript- преобразовать объект в массив
Обратите внимание, что это нормально для кода на стороне сервера, но использование зеркал с dart2js не рекомендуется. Пакет [smoke] (https://pub.dartlang.org/packages/smoke) может помочь в этом случае использования. Он использует зеркала при работе в Dartium, но использует генерацию кода при работе с dart2js. –