为了账号安全,请及时绑定邮箱和手机立即绑定

在JavaScript中的多维JSON对象的不同级别上查找重复值

在JavaScript中的多维JSON对象的不同级别上查找重复值

GCT1015 2021-05-04 17:40:06
我有一个getResponse["taskData"]像这样的JSON对象(字符串化)作为示例:[   {title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0"},   {title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0"},   {title: "qwerty", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0"},   {title: "asdfgh", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0"},   {title: "zxcvbn", startOn: "2-5-2019-9-0", endOn: "2-5-2019-11-0"}]我需要知道多维对象的不同级别上的startOn值有多少重复。例如,得到30-4-2019-18-0 (2), 1-5-2019-16-30 (2)结果对我来说将是有用的。或者,获取相应重复项的索引整数也将有所帮助。我一直在尝试使用此功能来实现这样的功能:var countSameStart = {};getResponse["taskData"].forEach(function (x) {    countSameStart[x] = ( countSameStart[x] || 0 ) + 1;});但是,然后我发现该函数无法访问对象的不同级别并比较这些值。而且,我无法全神贯注于此。我感谢任何有建设性的答案作为代码或建议。
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

假设您有一个带有数组的对象,则可以获取值并迭代数组并获取所需键的数量。


var getResponse = { taskData: [{ title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0" }, { title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0" }, { title: "qwerty", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0" }, { title: "asdfgh", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0" }, { title: "zxcvbn", startOn: "2-5-2019-9-0", endOn: "2-5-2019-11-0" }], otherData: [{ title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0" }, { title: "qwerty", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0" }, { title: "asdfgh", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0" }] },

    key = 'startOn',

    count = Object.values(getResponse).reduce(

        (c, a) => (a.forEach(({ [key]: item }) => c[item] = (c[item] || 0) + 1), c),

        Object.create(null)

    );


console.log(count);


查看完整回答
反对 回复 2021-05-20
?
holdtom

TA贡献1805条经验 获得超10个赞

您可以创建一个带有属性iestartOn和value的函数。forEach如果prop匹配给定值,则在数组上使用,然后将其索引推入结果对象。


const arr = [{title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0"}, {title: "123456", startOn: "30-4-2019-18-0", endOn: "30-4-2019-19-0"}, {title: "qwerty", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0"}, {title: "asdfgh", startOn: "1-5-2019-16-30", endOn: "1-5-2019-19-0"}, {title: "zxcvbn", startOn: "2-5-2019-9-0", endOn: "2-5-2019-11-0"}]

   

function dups(arr,key,val){

  let res = [];

  arr.forEach((x,i) => {

    if(x[key] === val) res.push(i);

  })

  return res;

}


console.log(dups(arr,'startOn','30-4-2019-18-0'))


查看完整回答
反对 回复 2021-05-20
?
杨魅力

TA贡献1811条经验 获得超6个赞

您可以使用array reduce并创建一个对象,其中键将为startOn,其值将为对象的数组。然后,您可以使用该键值并使用长度来获得相同的项目数startOn


let data = [{

    title: "123456",

    startOn: "30-4-2019-18-0",

    endOn: "30-4-2019-19-0"

  },

  {

    title: "123456",

    startOn: "30-4-2019-18-0",

    endOn: "30-4-2019-19-0"

  },

  {

    title: "qwerty",

    startOn: "1-5-2019-16-30",

    endOn: "1-5-2019-19-0"

  },

  {

    title: "asdfgh",

    startOn: "1-5-2019-16-30",

    endOn: "1-5-2019-19-0"

  },

  {

    title: "zxcvbn",

    startOn: "2-5-2019-9-0",

    endOn: "2-5-2019-11-0"

  }

]


let k = data.reduce(function(acc, curr) {

  if (acc[curr.startOn]) {

    acc[curr.startOn].push(curr)

  } else {

    acc[curr.startOn] = [curr]

  }

  return acc;


}, {});

console.log(k["30-4-2019-18-0"].length)


查看完整回答
反对 回复 2021-05-20
  • 3 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信