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

我有一个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;

});

但是,然后我发现该函数无法访问对象的不同级别并比较这些值。而且,我无法全神贯注于此。


我感谢任何有建设性的答案作为代码或建议。


GCT1015
浏览 162回答 3
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);

holdtom

您可以创建一个带有属性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'))

杨魅力

您可以使用array reduce并创建一个对象,其中键将为startOn,其值将为对象的数组。然后,您可以使用该键值并使用长度来获得相同的项目数startOnlet 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript