程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我需要比较两个数组并将输出为一个数组,对象在内部进行比较大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决我需要比较两个数组并将输出为一个数组,对象在内部进行比较?

开发过程中遇到我需要比较两个数组并将输出为一个数组,对象在内部进行比较的问题如何解决?下面主要结合日常开发的经验,给出你关于我需要比较两个数组并将输出为一个数组,对象在内部进行比较的解决方法建议,希望对你解决我需要比较两个数组并将输出为一个数组,对象在内部进行比较有所启发或帮助;

我有以下代码,这是我之前的一个问题的答案,但我不想把 question 弄乱,我想重申我实际在寻找什么,因为我似乎无法掌握它。

我想要的预期输出现在只是一个具有更改值和 ID 的对象。但是,这需要更改,因此它不会像现在的代码那样在每次实例更改时都会堆积,并且会控制台另一个对象。我只是希望最新的比较得到安慰而忽略上一个。希望这是有道理的。如果需要,我可以进一步解释。

当我说堆叠时,我的意思是,它在下一次状态改变时控制两个项目,然后是三个,依此类推,第四个。我只想要最新的更改,以便我可以运行突变并更新我的数据库

状态改变后的期望结果#1

import eyed3
import urllib.request

audiofile = eyed3.load("D:\\tmp\\tmp_mp3\\track_example.mp3")

audiofile.initTag(version=(2,3,0))  # version is important
# Other data for demonstration purpose only (from docs)
audiofile.tag.artist = "Token Entry"
audiofile.tag.album = "Free For All Comp LP"
audiofile.tag.album_artist = "VarIoUs Artists"
audiofile.tag.title = "The Edge"

# Read image from local file (for demonstration and future readers)
with open("D:\\tmp\\tmp_covers\\cover_2021-03-13.jpg","rb") as image_file:
    imagedata = image_file.read()
audiofile.tag.images.set(3,imagedata,"image/jpeg",u"cover")
audiofile.tag.save()

# Get image from th@R_696_9473@ernet
response = urllib.request.urlopen("https://example.com/your-picture-here.jpg")
imagedata = response.read()
audiofile.tag.images.set(3,u"cover")
audiofile.tag.save()

状态改变后的预期结果#2


  {Col0:"snappy",col10:"292959180223939085"}


  {Col0:"some state change",col10:"292959180223939085"}

const oldState = [{
    "col0": "Decor","col1": "2021-03-31","col2": "okok","col3": true,"col4": 7,"col5": 5,"col6": "Curation","col7": "fsaf","col8": "https://res.cloudinary.com/kitson-co/image/upload/v1615646495/catalog/sse5zxtklsj3ib730zjy.png","col9": 4,"col10": "292959180223939085"
  },{
    "col0": "Decor","col2": "fdsafd","col4": 3,"col5": 3,"col7": "fdsfsa","col8": "https://res.cloudinary.com/kitson-co/image/upload/v1615657360/catalog/qpudbgkrvftjlo5c1yma.png","col9": 5,"col10": "292970573359743501"
  }
]

const saveData = [{
    "col0": "Snappy","col10": "292970573359743501"
  }
]

这是我的实现方式,saveData 状态依赖于到达 useState,所以它总是在变化。


function compareArray(oldItem,newItem) {
  const compared = {};

  for (const key in oldItem) {
    if ((key == 'col10' || oldItem[key] != newItem[key]) && Object.hasOwnProperty.call(newItem,key) && Object.hasOwnProperty.call(oldItem,key)) {
      compared[key] = newItem[key];
    }
  }

  return compared;
}

oldState.map((old,i) => [old,saveData[i]]).forEach((item) => console.log(compareArray(...item)));

更新:每次比较后,它都会向对象添加属性,我希望每次 onblur 事件触发时只有最近更改的属性,这意味着用户已离开输入并触发我的保存突变。

这是一张屏幕截图,显示了对象中的多个属性,它应该只有一个而不是 ID。它应该一起替换对象,而不是每次比较都添加它。数组中还有两个对象,我只需要最近更改的一个,因为我在每次比较时都会触发保存突变,并且只需要一个具有两个字段的对象,即已更改的字段和 ID。

我需要比较两个数组并将输出为一个数组,对象在内部进行比较

解决方法

我认为你需要合并你的对象才能只有一个,就像这样:

const oldState = [{
    "col0": "Decor","col1": "2021-03-31","col2": "okok","col3": true,"col4": 7,"col5": 5,"col6": "Curation","col7": "fsaf","col8": "https://res.cloudinary.com/kitson-co/image/upload/v1615646495/catalog/sse5zxtklsj3ib730zjy.png","col9": 4,"col10": "292959180223939085"
  },{
    "col0": "Decor","col2": "fdsafd","col4": 3,"col5": 3,"col7": "fdsfsa","col8": "https://res.cloudinary.com/kitson-co/image/upload/v1615657360/catalog/qpudbgkrvftjlo5c1yma.png","col9": 5,"col10": "292970573359743501"
  }
]

const saveData = [{
    "col0": "Snappy","col10": "292970573359743501"
  }
]
function compareArray(oldItem,newItem) {
  const compared = {};

  for (const key in oldItem) {
    if ((key == 'col10' || oldItem[key] != newItem[key]) && Object.hasOwnProperty.call(newItem,key) && Object.hasOwnProperty.call(oldItem,key)) {
      compared[key] = newItem[key];
    }
  }

  return compared;
}

let myObject = {}
oldState.map((old,i) => [old,saveData[i]]).forEach((item) => myObject = {...myObject,...compareArray(...item)}
);
console.log(myObject)

,

此函数将遍历两个状态并比较每个值。如果新值不相同,它会将其添加到对象中。如果对象具有属性,则它会添加 col10 属性并将其添加到已更改对象的列表中。

const getStateDiff = (oldState,newStatE) => {
  const differences = [];

  for (let i = 0; i < oldState.length; i++) {
    const oldStateKeys = oldState[i];
    const newStateKeys = newState[i];
    const entryDiff = {};

    for (let key in oldStateKeys) {
      if (
        newStateKeys.hasOwnProperty(key) &&
        oldStateKeys[key] !== newStateKeys[key]
      ) {
        entryDiff[key] = newStateKeys[key];
      }
    }

    if (Object.keys(entryDiff).length > 0) {
      entryDiff['col10'] = newStateKeys['col10'];
      differences.push(entryDiff);
    }
  }

  return differences;
};

const oldState = [
  {
    "col0": "Decor","col10": "292970573359743501"
  }
];

const saveData = [
  {
    "col0": "Snappy","col2": "fdsaf","col10": "292970573359743501"
  }
];

console.log(getStateDiff(oldState,saveData));

大佬总结

以上是大佬教程为你收集整理的我需要比较两个数组并将输出为一个数组,对象在内部进行比较全部内容,希望文章能够帮你解决我需要比较两个数组并将输出为一个数组,对象在内部进行比较所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: