같은 속성에있는 객체의 배열을 어떻게 필터링 할 수 있습니까?

올리버 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

React에서 상태 배열로 데이터 객체를 어떻게 필터링 할 수 있습니까?

분류에서Dev

NodeJS에서 날짜가 같은 경우 객체 배열에 값을 어떻게 추가 할 수 있습니까?

분류에서Dev

Typescript의 필드에 의해 인덱싱 된 객체 배열을 어떻게 지정할 수 있습니까?

분류에서Dev

UISearchController에서 배열을 어떻게 필터링 할 수 있습니까?

분류에서Dev

HTMLElement와 같은 Javascript 객체를 어떻게 열거 할 수 있습니까?

분류에서Dev

MongoDb에서 배열 속성의 객체에 값을 어떻게 설정할 수 있습니까?

분류에서Dev

MongoDb에서 배열 속성의 객체에 값을 어떻게 설정할 수 있습니까?

분류에서Dev

JavaScript의 객체 배열에서 속성을 어떻게 선택할 수 있습니까?

분류에서Dev

Java의 클래스 속성에 객체 배열을 어떻게 저장할 수 있습니까?

분류에서Dev

배열 항목을 어떻게 필터링 할 수 있습니까?

분류에서Dev

객체 배열을 어떻게 할 수 있습니까?

분류에서Dev

javascript-목록 필터링 : 배열과 배열을 포함한 객체가있는 배열 사이의 교차점을 어떻게 찾을 수 있습니까?

분류에서Dev

비 객체의 속성을 얻으려고-> 객체가 있는지 어떻게 확인할 수 있습니까?

분류에서Dev

내 명령의 출력을 어떻게 필터링 할 수 있습니까? (Powershell)

분류에서Dev

객체 배열이 주어진 경우 배열의 각 일치 항목에 따라 데이터베이스에있는 기존 객체의 결과를 어떻게 필터링 할 수 있습니까?

분류에서Dev

Ext.js 4.2.0의 그리드에서 렌더링 된 열을 어떻게 필터링 할 수 있습니까?

분류에서Dev

VueJS로 객체를 어떻게 필터링 할 수 있습니까?

분류에서Dev

같은 이름의 pandas 열 값을 어떻게 추가 할 수 있습니까?

분류에서Dev

같은 열의 값을 어떻게 계산할 수 있습니까?

분류에서Dev

문자열의 특정 키에 해당하는 값을 어떻게 필터링 할 수 있습니까?

분류에서Dev

날짜 값을 어떻게 필터링 할 수 있습니까?

분류에서Dev

배열을 객체의 각 속성으로 어떻게 이동 해제 할 수 있습니까?

분류에서Dev

angularjs의 컨트롤러에서 필터링 된 배열에 어떻게 액세스 할 수 있습니까?

분류에서Dev

이와 같은 배열을 어떻게 역 직렬화 할 수 있습니까?

분류에서Dev

하위 배열의 다른 컬렉션에있는 속성을 어떻게 호출 할 수 있습니까?

분류에서Dev

React Admin의 show / ArrayField 구성 요소에서 객체 내부에 중첩 된 배열의 내용을 어떻게 렌더링 할 수 있습니까?

분류에서Dev

어떻게 자바 같은 객체 내부의 방법으로 객체를 직렬화 할 수 있습니까?

분류에서Dev

JS에서 PHP의 쿼리에서 생성 된 목록을 어떻게 필터링 할 수 있습니까?

분류에서Dev

PHP에서 배열의 객체를 어떻게 전달할 수 있습니까?

Related 관련 기사

  1. 1

    React에서 상태 배열로 데이터 객체를 어떻게 필터링 할 수 있습니까?

  2. 2

    NodeJS에서 날짜가 같은 경우 객체 배열에 값을 어떻게 추가 할 수 있습니까?

  3. 3

    Typescript의 필드에 의해 인덱싱 된 객체 배열을 어떻게 지정할 수 있습니까?

  4. 4

    UISearchController에서 배열을 어떻게 필터링 할 수 있습니까?

  5. 5

    HTMLElement와 같은 Javascript 객체를 어떻게 열거 할 수 있습니까?

  6. 6

    MongoDb에서 배열 속성의 객체에 값을 어떻게 설정할 수 있습니까?

  7. 7

    MongoDb에서 배열 속성의 객체에 값을 어떻게 설정할 수 있습니까?

  8. 8

    JavaScript의 객체 배열에서 속성을 어떻게 선택할 수 있습니까?

  9. 9

    Java의 클래스 속성에 객체 배열을 어떻게 저장할 수 있습니까?

  10. 10

    배열 항목을 어떻게 필터링 할 수 있습니까?

  11. 11

    객체 배열을 어떻게 할 수 있습니까?

  12. 12

    javascript-목록 필터링 : 배열과 배열을 포함한 객체가있는 배열 사이의 교차점을 어떻게 찾을 수 있습니까?

  13. 13

    비 객체의 속성을 얻으려고-> 객체가 있는지 어떻게 확인할 수 있습니까?

  14. 14

    내 명령의 출력을 어떻게 필터링 할 수 있습니까? (Powershell)

  15. 15

    객체 배열이 주어진 경우 배열의 각 일치 항목에 따라 데이터베이스에있는 기존 객체의 결과를 어떻게 필터링 할 수 있습니까?

  16. 16

    Ext.js 4.2.0의 그리드에서 렌더링 된 열을 어떻게 필터링 할 수 있습니까?

  17. 17

    VueJS로 객체를 어떻게 필터링 할 수 있습니까?

  18. 18

    같은 이름의 pandas 열 값을 어떻게 추가 할 수 있습니까?

  19. 19

    같은 열의 값을 어떻게 계산할 수 있습니까?

  20. 20

    문자열의 특정 키에 해당하는 값을 어떻게 필터링 할 수 있습니까?

  21. 21

    날짜 값을 어떻게 필터링 할 수 있습니까?

  22. 22

    배열을 객체의 각 속성으로 어떻게 이동 해제 할 수 있습니까?

  23. 23

    angularjs의 컨트롤러에서 필터링 된 배열에 어떻게 액세스 할 수 있습니까?

  24. 24

    이와 같은 배열을 어떻게 역 직렬화 할 수 있습니까?

  25. 25

    하위 배열의 다른 컬렉션에있는 속성을 어떻게 호출 할 수 있습니까?

  26. 26

    React Admin의 show / ArrayField 구성 요소에서 객체 내부에 중첩 된 배열의 내용을 어떻게 렌더링 할 수 있습니까?

  27. 27

    어떻게 자바 같은 객체 내부의 방법으로 객체를 직렬화 할 수 있습니까?

  28. 28

    JS에서 PHP의 쿼리에서 생성 된 목록을 어떻게 필터링 할 수 있습니까?

  29. 29

    PHP에서 배열의 객체를 어떻게 전달할 수 있습니까?

뜨겁다태그

보관