【问题标题】:delete part of an object and place it in another object删除对象的一部分并将其放置在另一个对象中
【发布时间】:2022-12-08 01:12:51
【问题描述】:

我有一个对象(值)。我想选择 startWith(') 并且包含一个对象的字段(在本例中为 2)。我想从 createValue 数组中删除整个对象并将其放在对象 CreateFileValue 中。你可以检查输出

输入示例:

const values = {
  ID: ,
  createValues: [{
      field: "",
      value: 'hello',
    },
    {
      field: "102",
      fileName: "doc.pdf",
      value: {
        field: 'F2',
        fileName: '',
        value: 'jkhkjhkhkjh'
      },
    }

  ]
}

示例输出:

const values = {
  ID:817,
  creaues: [{
      field: "F",
      value: 'hello',
    }

  ],
  creaues: {
    "field": "F",
    "fileName": "bulletin_paie_avril.pdf",
    "value": "jkhkjhkhkjh"
  }
}

const values = {
  ID: 748817,
  crealues: [{
      field: "FL",
      value: 'hello',
    },
    {
      field: "F2",
      fileName: "doc.pdf",
      value: {
        field: '',
        fileName: '.pdf',
        value: 'jkhkjhkhkjh'
      },
    }

  ]
}

const res = () => {
  if (values.calues.startsWith('') && typeof values.cralues.startsWith('F') === 'object') {
    return {

    };

  }
}
};
console.log(res());

【问题讨论】:

标签: javascript object


【解决方案1】:

const values = {
  ID: 748817,
  createValues: [{
      field: "FLD_STR_101",
      value: 'hello',
    },
    {
      field: "FLD_STR_102",
      fileName: "doc.pdf",
      value: {
        field: 'FLD_STR_102',
        fileName: 'bulletin_paie_avril.pdf',
        value: 'jkhkjhkhkjh'
      },
    }

  ]
}

// build createFileValues structure
values.createFileValues = values.createValues.filter(v => v.field.startsWith("FLD_STR_") && typeof v.value === "object");
// filter the files out of createValues
values.createValues = values.createValues.filter(v => !values.createFileValues.includes(v));
console.log(values);

【讨论】:

  • 我不想返回一个数组,createFileValue 应该是一个简单的对象
  • 是的,但是你有一组 createValues,我不能保证文件中只有一个元素。
  • createFileValue 基本上是一个对象,而不是数组。永远不会。我也只想返回值 value: { field: 'FLD_STR_102', fileName: 'bulletin_paie_avril.pdf', value: 'jkhkjhkhkjh' },
  • 可以加values.createFileValues = values.createFileValues[0].value
【解决方案2】:

values.createValues.startsWith('FLD_STR_') 无效,因为 createValues 是一个数组。您需要遍历 values.createValues 以检查每个 field.startsWith('FLD_STR_') 以及值是否为对象(有关此示例,请参见 How to detect if a variable is a pure javascript object)。

const values = {
  ID: 748817,
  createValues: [{
      field: "FLD_STR_101",
      value: 'hello',
    },
    {
      field: "FLD_STR_102",
      fileName: "doc.pdf",
      value: {
        field: 'FLD_STR_102',
        fileName: 'bulletin_paie_avril.pdf',
        value: 'jkhkjhkhkjh'
      }
    }
  ]
}

const res = () => {
  var newResult = {
    ID: values.ID,
    createValues: []
  };
  
  values.createValues.forEach(function(item) {
    var newCreateValue = {};
    
    if (item.field.startsWith('FLD_STR_') && item.value.constructor.name === "Object") {
      newCreateValue.field = item.value.field;
      newCreateValue.value = item.value.value;
      newCreateValue.fileName = item.value.fileName;
      
      // if this is a createFilesValue, add it as a new key/value to the newResult object
      newResult.createFileValues = newCreateValue;
    } else {
      newCreateValue.field = item.field;
      newCreateValue.value = item.value;
      
      // if this is an existing createValues, add it to the createValues array
      newResult.createValues.push(newCreateValue);
    }
  });
  
  return newResult;
};
console.log(res());

【讨论】:

    【解决方案3】:

    这应该工作

    const values = {
      ID: 748817,
      createValues: [{
          field: "FLD_STR_101",
          value: 'hello',
        },
        {
          field: "FLD_STR_102",
          fileName: "doc.pdf",
          value: {
            field: 'FLD_STR_102',
            fileName: 'bulletin_paie_avril.pdf',
            value: 'jkhkjhkhkjh'
          },
        }
    
      ]
    }
    
    const res = (data) => {
      let oldCreateValues = data.createValues;
      let oldCreateFileValues = data.createFileValues;
      
      let newCreateValues = [];
      let newCreateFileValues = oldCreateFileValues && Array.isArray(oldCreateFileValues) ? oldCreateFileValues : [];
      if (oldCreateValues && Array.isArray(oldCreateValues)) {
        oldCreateValues.forEach(item => {
            if (item.field.startsWith('FLD_STR_') && item.value && typeof item.value === 'object') {
            newCreateFileValues.push(item);
          } else {
            newCreateValues.push(item);
          }
        });
      }
      
      data.createValues = newCreateValues;
      data.createFileValues = newCreateFileValues;
      
      return data;
    };
    
    console.log(res(values));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-11
      • 2019-07-10
      • 2020-10-30
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      相关资源
      最近更新 更多