如何过滤同一属性中的对象数组?

奥利弗·D

我有一个“颜色,尺寸等”产品选项,并且我们知道用户可以从“从颜色中选择仅红色”选项中选择一项,这一次,我将所选的一个“单独的数组”选为“用户所有选项”但是问题是用户可以在相同的“例如颜色”字段中添加重复的选项,那么我该如何解决这个问题?最后的事情应该是:例如,来自单独选项的一件事情

SelectedOptions = [
      { name:"red",id:88,optionType:"Color"},
      { name:"XL",id:22,optionType:"Size"},
      ....
    ]

但是我现在去

SelectedOptions = [
          { name:"red",id:88,optionType:"Color"},
          { name:"green",id:87,optionType:"Color"},
          { name:"XL",id:22,optionType:"Size"},
          { name:"M",id:22,optionType:"Size"},
          ....
        ];

我知道这是因为我将任何选定的项推到SelectedOptions数组中,我试图通过检查来解决它,optionType但我没有任何好主意

选项

程式码片段

 const [selectedIndexColor, setSelectedIndexColor] = useState<
    number | undefined
  >();
  const [selectedIndexText, setSelectedIndexText] = useState<number | null>();
  const [selectedIndexImage, setSelectedIndexImage] = useState<number | null>();
  interface ManipulateValueOptionProp extends valueOptionProp {
    optionType: string;
  }
  const [allOptions, setAllOptions] = useState<ManipulateValueOptionProp[]>([]);

const renderValue = (value: valueOptionProp, type: string) => {
    const selectedColor = selectedIndexColor === value.id;
    const selectedText = selectedIndexText === value.id;
    const selectedImage = selectedIndexImage === value.id;
    switch (type) {
      case 'text': {
        return (
          <View
            style={[
              styles.selectedText,
              {backgroundColor: selectedText ? 'black' : 'transparent'},
            ]}>
            <Text
              style={{
                textAlign: 'center',
                color: selectedText ? 'white' : 'black',
                fontSize: 12,
              }}>
              {value.name_en}
            </Text>
          </View>
        );
      }
      case 'Color': {
        return (
          <>
            <View
              // @ts-ignore
              // eslint-disable-next-line react-native/no-inline-styles
              style={{
                width: 53,
                height: 53,
                backgroundColor: value.display_value,
              }}
            />
            {selectedColor ? (
              <View style={styles.selectedColor}>
                <CheckmarkIcon color="black" />
              </View>
            ) : null}
          </>
        );
      }
      case 'images': {
        return (
          <>
            <Image
              // @ts-ignore
              source={{uri: value.display_value}}
              // eslint-disable-next-line react-native/no-inline-styles
              style={{width: 53, height: 53, backgroundColor: '#0f4c7f'}}
            />
            {selectedImage ? (
              <View style={styles.selectedColor}>
                <CheckmarkIcon />
              </View>
            ) : null}
          </>
        );
      }
      default: {
        return null;
      }
    }
  };



{item.options.map((option) => {
        return (
          <View style={styles.optionsBox}>
            <Text style={styles.optionTxt}>{option.label_en}</Text>
            <View style={{flexDirection: 'row'}}>
              {option.values.map((value: valueOptionProp) => {
                return (
                  <ScalePressable
                    key={`${option.id}${value.id}`}
                    onPress={() => {
                      option.type === 'Color' &&
                        setSelectedIndexColor(value.id);
                      option.type === 'text' && setSelectedIndexText(value.id);
                      option.type === 'images' &&
                        setSelectedIndexImage(value.id);

                      if (
                        !allOptions.some(
                          (alreadyExist) => alreadyExist.id === value.id,
                        )
                      ) {
                        setAllOptions((options) => [
                          ...options,
                          {...value, optionType: option.type},
                        ]);
                      }
                    }}>
                    <View style={styles.values}>
                      {renderValue(value, option.type)}
                    </View>
                  </ScalePressable>
                );
              })}
            </View>
          </View>
        );
      })}
绿色盒子

这是一种可能的解决方案。您可以考虑通过删除与新选项具有相同选项类型的所有选项,然后将新选项添加​​到新数组中来创建新阵列。

let selectedOptions = [
  { name: 'red', id: 88, optionType: 'Color' },
  { name: 'XL', id: 22, optionType: 'Size' },
];

let newOption = { name: 'green', id: 87, optionType: 'Color' };

selectedOptions = [
  ...selectedOptions.filter(
    option => option.optionType != newOption.optionType
  ),
  newOption,
];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何过滤同一属性中的对象数组?

来自分类Dev

如何过滤数组中对象的属性

来自分类Dev

如何按对象数组中的数组属性进行过滤

来自分类Dev

如何查询同一个json对象数组中的多个属性?

来自分类Dev

如何根据对象数组中属性的第一个字符过滤对象数组?

来自分类Dev

如何使用对象属性过滤数组对象

来自分类Dev

根据对象数组中的属性过滤数组

来自分类Dev

如何过滤数组中的对象?

来自分类Dev

Javascript过滤数组中的对象并返回数组中对象的属性

来自分类Dev

在方法中过滤基于数组的对象的属性

来自分类Dev

如果同一数组.net中的另一个对象中已经存在属性,如何不显示对象

来自分类Dev

使用角度6中的多个值过滤同一键的数组对象

来自分类Dev

如何从对象列表中获取一个属性的数组?

来自分类Dev

JavaScript / Angular:如何从同一对象的数组初始化属性?

来自分类Dev

如何使用javascript根据另一个数组对象的属性值过滤对象数组

来自分类Dev

如何过滤从对象的属性数组中排除的数组

来自分类Dev

如果对象包含另一个数组中存在值的属性,则过滤对象数组

来自分类Dev

根据angularjs ng-repeat中的属性之一过滤数组对象

来自分类Dev

如何从对象数组中过滤null?

来自分类Dev

如何在Loadash中过滤对象数组

来自分类Dev

如何在Lodash中过滤对象数组

来自分类Dev

如何过滤js中的对象数组?

来自分类Dev

如何在同一Javascript对象中的另一个属性的值中引用一个属性?

来自分类Dev

如何通过forEach循环中的属性过滤Typescript中的对象数组,并返回带有props的Component?

来自分类Dev

如何过滤对象数组中的对象数组?javascript

来自分类Dev

当我在同一对象中拥有另一个属性的值时,从对象数组中获取一个Object属性

来自分类Dev

对象唯一属性值的jq过滤器数组

来自分类Dev

访问同一对象中的对象属性

来自分类Dev

在React中的同一数组上过滤和映射

Related 相关文章

  1. 1

    如何过滤同一属性中的对象数组?

  2. 2

    如何过滤数组中对象的属性

  3. 3

    如何按对象数组中的数组属性进行过滤

  4. 4

    如何查询同一个json对象数组中的多个属性?

  5. 5

    如何根据对象数组中属性的第一个字符过滤对象数组?

  6. 6

    如何使用对象属性过滤数组对象

  7. 7

    根据对象数组中的属性过滤数组

  8. 8

    如何过滤数组中的对象?

  9. 9

    Javascript过滤数组中的对象并返回数组中对象的属性

  10. 10

    在方法中过滤基于数组的对象的属性

  11. 11

    如果同一数组.net中的另一个对象中已经存在属性,如何不显示对象

  12. 12

    使用角度6中的多个值过滤同一键的数组对象

  13. 13

    如何从对象列表中获取一个属性的数组?

  14. 14

    JavaScript / Angular:如何从同一对象的数组初始化属性?

  15. 15

    如何使用javascript根据另一个数组对象的属性值过滤对象数组

  16. 16

    如何过滤从对象的属性数组中排除的数组

  17. 17

    如果对象包含另一个数组中存在值的属性,则过滤对象数组

  18. 18

    根据angularjs ng-repeat中的属性之一过滤数组对象

  19. 19

    如何从对象数组中过滤null?

  20. 20

    如何在Loadash中过滤对象数组

  21. 21

    如何在Lodash中过滤对象数组

  22. 22

    如何过滤js中的对象数组?

  23. 23

    如何在同一Javascript对象中的另一个属性的值中引用一个属性?

  24. 24

    如何通过forEach循环中的属性过滤Typescript中的对象数组,并返回带有props的Component?

  25. 25

    如何过滤对象数组中的对象数组?javascript

  26. 26

    当我在同一对象中拥有另一个属性的值时,从对象数组中获取一个Object属性

  27. 27

    对象唯一属性值的jq过滤器数组

  28. 28

    访问同一对象中的对象属性

  29. 29

    在React中的同一数组上过滤和映射

热门标签

归档