>

아래에 배열의 객체가 있고 키와 값으로 필터링하고 싶습니다

var arrayObj = [{name:'ram',lastname:'jha',address:{fistLine:'100 ft raod',street:'kfc'},mobileNumber:12345745},
               {name:'rakesh',lastname:'jha',address:{fistLine:'200 ft raod',street:'pizza hut'},mobileNumber:12345746},
               {name:'pankaj',lastname:'jha',address:{fistLine:'300 ft raod',street:'abc line'},mobileNumber:12345747}];

아래와 같이 출력을 원합니다 :

let newarrayObj:[['name','lastname', 'address.fistLine','address.street','mobileNumber'],
                 ['ram','jha','100 ft raod','kfc','12345745'],
                 ['rakesh','jha','200 ft raod','pizza hut','12345746'],
                 ['pankaj','jha','300 ft raod','abc line','12345747']]

  • 답변 # 1

    와이즈 비즈 가정  항목이 1 개 이상인 경우 개체의 깊이에 관계없이 다음을 수행 할 수 있습니다.

    arrayObj
    
    

  • 답변 # 2

    Object.keys (), Object.values ​​() 및 flat ()과 함께 map ()을 사용할 수 있습니다.

    const flatKeys = object => Object.entries(object).reduce((keys, [key, value]) => {
      if (typeof value === 'object') { // && value !== null if needed
        flatKeys(value).forEach(subKey => keys.push(key + '.' + subKey))
      } else {
        keys.push(key)
      }
      return keys
    }, [])
    const flatValues = object => Object.values(object).reduce((values, value) => {
      if (typeof value === 'object') { // && value !== null if needed
        flatValues(value).forEach(subValue => values.push(subValue))
      } else {
        values.push(value)
      }
      return values
    }, [])
    const arrayObj = [
      { name: 'ram',    lastname:'jha', address: { fistLine:'100 ft raod', street: 'kfc'       }, mobileNumber: 12345745 },
      { name: 'rakesh', lastname:'jha', address: { fistLine:'200 ft raod', street: 'pizza hut' }, mobileNumber: 12345746 },
      { name: 'pankaj', lastname:'jha', address: { fistLine:'300 ft raod', street: 'abc line'  }, mobileNumber: 12345747 }
    ]
    const newarrayObj = [flatKeys(arrayObj[0]), ...arrayObj.map(flatValues)]
    console.log(newarrayObj)
    
    

  • 답변 # 3

    아래 솔루션은 최대 2 단계까지 작동합니다. 더 깊으면 재귀 접근 방식을 사용해야합니다. 현재 위치는 값이 내부 루프를 생성하는 객체인지 확인한 다음 객체를 필요한 형식으로 줄입니다.

    var arrayObj = [{ name: 'ram', lastname: 'jha', address: { firstLine: '100 ft raod', street: 'kfc' }, mobileNumber: 12345745 }, { name: 'rakesh', lastname: 'jha', address: { fistLine: '200 ft raod', street: 'pizza hut' }, mobileNumber: 12345746 }, { name: 'pankaj', lastname: 'jha', address: { fistLine: '300 ft raod', street: 'abc line' }, mobileNumber: 12345747 } ];
    var keys = Object.entries(arrayObj[0]).map(([key, value]) => {
      if (typeof value === 'object') {
        return Object.keys(value).map(subKey => key + '.' + subKey);
      } else {
        return key;
      }
    }).flat();
    var values = arrayObj.map(item =>
      Object.values(item).map(value =>
        typeof value === 'object' ? Object.values(value) : value
      ).flat()
    );
    var result = [keys].concat(values);
    console.log(result);
    
    

    var arrayObj = [{name:'ram',lastname:'jha',address:{fistLine:'100 ft raod',street:'kfc'},mobileNumber:12345745}, {name:'rakesh',lastname:'jha',address:{fistLine:'200 ft raod',street:'pizza hut'},mobileNumber:12345746}, {name:'pankaj',lastname:'jha',address:{fistLine:'300 ft raod',street:'abc line'},mobileNumber:12345747}]; let newArrayObj = arrayObj.reduce((acc,obj,i) => { if(!acc[0]) acc[0]=[]; acc[i+1]=[]; Object.entries(obj).forEach(([key,value]) => { if(value && typeof value!= 'object' && !acc[0].includes(key)) { acc[0].push(key); acc[i+1].push(value); } else if (value && typeof value === 'object') { Object.entries(value).forEach(([k,v]) => { let val = key+'.'+k; if(!acc[0].includes(val)) acc[0].push(val); acc[i+1].push(v); }); } }); return acc; },[]) console.log(newArrayObj);

관련 자료

  • 이전 vba - 뛰어나다 - 조건부 서식 복사, 규칙 제거, 형식 유지
  • 다음 tcp - c - 소켓에 문자열로 파일 이름 목록을 보내려면 어떻게해야합니까?