现在:
data=[{label:'a',value:'1'},{label:'a',value:'2'},{label:'b',value:'1'},{label:'c',value:'1'},{label:'d',value:'1'},{label:'a',value:'3'},{label:'b',value:'2'},{label:'c',value:'2'},]
希望:
data=[{label:'a',value:[1,2,3]},{label:'b',value:[1,2]},{label:'c',value:[1,2]},{label:'d',value:[1,2]}]
const data = [ {label:'a',value:'1'}, {label:'a',value:'2'}, {label:'b',value:'1'}, {label:'c',value:'1'}, {label:'d',value:'1'}, {label:'a',value:'3'}, {label:'b',value:'2'}, {label:'c',value:'2'}]// 相对之前的没啥优点// 就用时间优化了一下写法,提高了一下复用const format = (list, idKey = 'label', merageKey = 'value') => { let result = new Map() list.map(item => { let temp = result.get(item[idKey]) || {...item, [merageKey]: []}; result.set(item[idKey], {...temp, [merageKey]: [...temp[merageKey], item[merageKey]]}) }) return [...result.values()]}console.log(format(data))
const data = [{label:'a',value:'1'},{label:'a',value:'2'},{label:'b',value:'1'},{label:'c',value:'1'},{label:'d',value:'1'},{label:'a',value:'3'},{label:'b',value:'2'},{label:'c',value:'2'},]const newData = data.reduce((newArr, item) => { const sameLabelItem = newArr.filter(_item => _item.label === item.label)[0] // 现在 newArr 中找有没有相同 label 的对象 if (sameLabelItem) { // 如果有相同 label 的对象,直接在这个相同label对象的 value 中 push item 的 value sameLabelItem.value.push(item.value) } else { // 如果没有,newArr 直接 push item newArr.push({ label: item.label, value: [item.value] }) } return newArr // 返回 newArr}, [])console.log(newData) // 你要的结果
这个问题是关于如何从一个对象数组中提取出重复键对应的元素,并将其值合并成一个字符串,以逗号分隔。在处理这个问题时,我们可以使用一个字典来记录每个键对应的值列表,然后遍历这个字典,将每个列表合并成字符串。以下是实现这个功能的JavaScript代码:
function mergeValues(data) { // 创建一个字典来存储每个键对应的值列表 let dictionary = {}; // 遍历数据,将每个键值对添加到字典中 for (let i = 0; i < data.length; i++) { let { label, value } = data[i]; if (!dictionary[label]) { dictionary[label] = []; } dictionary[label].push(value); } // 创建一个新的数组来存储结果 let result = []; // 遍历字典,将每个键对应的值列表合并成字符串,并添加到结果数组中 for (let label in dictionary) { let values = dictionary[label]; let mergedValues = values.join(','); result.push({ label, value: mergedValues }); } return result;}let data = [ {label:'a',value:'1'}, {label:'a',value:'2'}, {label:'b',value:'1'}, {label:'c',value:'1'}, {label:'d',value:'1'}, {label:'a',value:'3'}, {label:'b',value:'2'}, {label:'c',value:'2'},];let result = mergeValues(data);console.log(result);
当运行这段代码时,将会打印出:
[ { label: 'a', value: '1,2,3' }, { label: 'b', value: '1,2' }, { label: 'c', value: '1,2' }, { label: 'd', value: '1' }]
这正是你想要的结果。需要注意的是,如果一个键对应多个值,那么这些值将会合并成一个字符串,并以逗号分隔。而如果一个键只有一个值,那么这个值将会作为一个单独的字符串返回。
问题内容: 我想以jQuery或纯JavaScript的形式获取JavaScript对象的键作为数组。 有没有比这更详细的方法? 问题答案: 用途: 这是ES5的功能。这意味着它可以在所有现代浏览器中使用,但不能在旧版浏览器中使用。 ES5-shim有一个实现可以偷
我的 json 对象中有一个键值对数组,需要根据键等于主机拉出一个设置值。 我无法基于位置进行匹配,因为它可能位于成对数组中的任何位置,而且数组的大小可能会有所不同。 我当前的 Jolt 规格看起来像,但它只是列出了每对: 当前输出为: 我希望的输出如下,注意到字段名称的更改: 我想知道我是否需要先做一个修改-覆盖-测试操作,然后再进行一次转换?
问题内容: 假设您有一个非常简单的数据结构: …并且您想将其中一些存储在javascript变量中。如我所见,您有三个选择: 如果您要存储(或希望可能拥有)多个“价值”部分(例如,增加他们的年龄等),显然第二或第三种选择是可行的,因此,为了论证,让我们假设在此结构中再也不需要任何数据值了。您选择哪一个,为什么? 编辑 :该示例现在显示最常见的情况:非顺序ID。 问题答案: 每个解决方案都有其用例。
问题内容: 我有以下数组: 结果: 现在如何显示具有重复值的键?在此函数不应返回([0],[9]),因为没有重复的值。 如何找到相同值的键,例如 对于“ 2011-06-25”,应返回[7],[8] 问题答案: 函数名称显然很长;) 现在$ dups将包含一个由重复值键控的多维数组,其中包含每个重复项的键,如果您将“ true”作为第二个参数发送,它将返回没有重复值的原始数组。 或者,您可以将原始
如果一个键也包含在字符串数组中,如何通过一个键的值从对象数组中筛选出对象? 不筛选出所有具有包含在此arr中的名称的对象: 结果:
我在开快车。js应用程序,有几个API将数据提供给下拉框。返回的数据格式为: 其中key是我的选项key,value是显示文本。这个数组的结构是固定的,我知道一个事实,我总是将key和value作为数组中每个对象的字段。 当我尝试验证提交的表单(额外的服务器端验证)时,我想交叉引用为字段提供的值与数组中“key”的所有值(blah、foo、bar、baz)。鉴于这将是一个经常使用的路由,我想避免每