List 颤振:检查[{quot;key";:“value";}]列表中是否存在键

List 颤振:检查[{quot;key";:“value";}]列表中是否存在键,list,flutter,dictionary,dart,List,Flutter,Dictionary,Dart,您好,1个月了,还在学习飞镖/颤振,有没有办法检查[{“key”:“value”}]中是否存在“key”? 我来自Javascript和python环境,所以我真的不知道这个东西叫什么,我只知道它是一个列表 这是我的JSON var example = [ { "name": "Store1", "products": [] }, { "name": "Store2&qu

您好,1个月了,还在学习飞镖/颤振,有没有办法检查[{“key”:“value”}]中是否存在“key”? 我来自Javascript和python环境,所以我真的不知道这个东西叫什么,我只知道它是一个列表

这是我的JSON

var example = [
  {
    "name": "Store1",
    "products": []
  },
  {
    "name": "Store2",
    "products": []
  },
  {
    "name": "Store3",
    "products": []
  },
  {
    "name": "Store4",
    "products": []
  }
]
所以我试着用这样的方式来访问它

var organizedCart = [];
for (var i = 0; i < example.length; i++) {
  if (!organizedCart[0].contains(example[i]['name'])) {
    organizedCart.add(
      {
        "name": "${example[i]['name']}",
        "products": [],
      },
    );
  }
}
var-organizedCart=[];
对于(var i=0;i
该条件的目标是避免添加现有的“名称”, 因此,基本上,如果organizedCart不包含给定的条件,我想在列表中添加一个{}

提前谢谢


尝试将for循环更改为
for(var i=0;i


Rest看起来似乎是正确的。

您可以使用
集合
而不是
列表
。如果使用,您可以定义应视为相等元素的内容

因此,我们可以将所有元素添加到这个新的
LinkedHashSet
中,这将自动确保元素的添加方式是,如果我们的
集合
尚未包含具有相同
名称
值的
映射,那么我们只添加
映射

import 'dart:collection';

void main() {
  final example = [
    {"name": "Store1", "products": <Object>[]},
    {"name": "Store2", "products": <Object>[]},
    {"name": "Store2", "products": <Object>[]},
    {"name": "Store3", "products": <Object>[]},
    {"name": "Store4", "products": <Object>[]},
    {"name": "Store4", "products": <Object>[]}
  ];

  final organizedCart = (LinkedHashSet<Map<String, Object>>(
          equals: (a, b) => a['name'] == b['name'],
          hashCode: (o) => o['name'].hashCode)
        ..addAll(example))
      .toList();

  print(organizedCart);
  // [{name: Store1, products: []}, {name: Store2, products: []},
  // {name: Store3, products: []}, {name: Store4, products: []}]
}

由于我们的
Store
实现了它自己的
==
hashCode
,我们可以使用do
{…example}
创建一个新的
集合
,在那里我们从
example
中添加所有
Store
对象,现在得到的结果是什么?未捕获的错误:RangeError(index):索引超出范围:没有有效的索引:0嘿,谢谢你!仍在学习dart和map对我来说真的很困惑,tbh…而且我找不到一个很好的dart map/list教程源,可以从头开始解决所有问题。无论如何,谢谢你!
map
应该用于定义了
key
value类型的地方。当您开始有多种类型的
(或
)在
Map
中,您确实做了一些错误的事情,应该考虑使用
类来代替。问题是,如果
Map
包含多个类型,Dart分析器无法帮助您静态查找类型错误,因此您会面临运行时错误的风险。谢谢,我将从划痕:))Godbless@SuperKola我想你已经看过官方语言之旅了:还有
class Store {
  final String name;
  final List<Object> products;

  Store({required this.name, required this.products});

  @override
  bool operator ==(Object other) => other is Store && other.name == name;

  @override
  int get hashCode => name.hashCode;

  @override
  String toString() => '$name have these products: $products';
}

void main() {
  final example = [
    Store(name: 'Store1', products: []),
    Store(name: 'Store2', products: []),
    Store(name: 'Store2', products: []),
    Store(name: 'Store3', products: []),
    Store(name: 'Store4', products: []),
    Store(name: 'Store4', products: []),
  ];

  final organizedCart = {...example}.toList();

  print(organizedCart);
  // [Store1 have these products: [], Store2 have these products: [],
  // Store3 have these products: [], Store4 have these products: []]
}