Javascript 将JSON操作到可观察的数组集合中
我正在寻求如何处理此JSON的建议:Javascript 将JSON操作到可观察的数组集合中,javascript,jquery,arrays,json,knockout.js,Javascript,Jquery,Arrays,Json,Knockout.js,我正在寻求如何处理此JSON的建议: [{ "title":"Things", "text":"1. Raindrops on roses 2. Whiskers on kittens 3. Bright copper kettles 4. Warm woolen mittens 5. Brown paper packages" },{ "title":"Colors", "text":"1. White 2. Blue 3. Red 4. Yellow 5. Green" },
[{
"title":"Things",
"text":"1. Raindrops on roses 2. Whiskers on kittens 3. Bright copper kettles 4. Warm woolen mittens 5. Brown paper packages"
},{
"title":"Colors",
"text":"1. White 2. Blue 3. Red 4. Yellow 5. Green"
},{
"title":"Animals",
"text":"1. Dog 2. Rabbit 3. Cat 4. Squirrel 5. Duck"
},{
"title":"Colors",
"text":"1. Red 2. Blue 3. Orange 4. Green 5. Purple"
},{
"title":"Animals",
"text":"1. Bear 2. Bird 3. Duck 4. Squirrel 5. Rabbit"
},{
"title":"Colors",
"text":"1. Yellow 2. White 3. Black 4. Brown 5. Blue"
}]
要返回这些可观察数组集合,请执行以下操作:
- 标题:颜色,数量:3,项目:
- 姓名:怀特,分数:9,计数:2
- 姓名:蓝色,分数:9,计数:3
- 姓名:红色,分数:8,计数:2
- 姓名:黄色,分数:7,计数:2
- 姓名:黑人,分数:3,计数:1
- 姓名:橙色,分数:3,计数:1
- 姓名:格林,分数:3,计数:2
- 姓名:布朗,分数:2,计数:1
- 姓名:紫色,分数:1,计数:1
- 标题:动物,数量:2,项目:
- 姓名:熊,分数:5,计数:1
- 姓名:狗,分数:5,计数:1
- 名字:兔子,分数:5,计数:2
- 名字:鸟,分数:4,计数:1
- 名字:鸭子,分数:4,计数:2
- 名字:松鼠,分数:4,计数:2
- 姓名:猫,分数:3,计数:1
- 标题:物品,数量:1,物品:
- 名称:玫瑰上的雨滴,分数:5,计数:1
- 姓名:小猫胡须,分数:4,计数:1
- 名称:光亮铜壶,分数:3,计数:1
- 名称:保暖羊毛手套,分数:2,计数:1
- 名称:牛皮纸包装,分数:1,计数:1
为了解释,我需要做以下工作:
title
对所有数组进行分组,计算其频率并返回新的列表对象,例如title:Colors,count:3
文本
项目以创建项目数组,计算其频率,根据索引位置为其分配分数(即[0]=5到[4]=1),将其分数相加并返回新的项目对象,例如名称:白色,分数:9,计数:2
计数对列表
集合进行排序,按得分
、计数
和名称对项目
集合进行排序
function List(title, items, count) {
var self = this;
self.Title = title;
self.Count = count;
self.Items = ko.observableArray(items);
}
function Item(name, count, score) {
var self = this;
self.Name = name;
self.Count = count;
self.Score = score;
}
我已经研究了各种方法,我本来打算用underline.js来攻击这个任务,但是我被报告的迭代数组的性能差所推迟
我预计JSON
文件将比我展示的示例大得多,因此性能将非常重要
希望有人能提出实现我的目标的最佳方法,或许能展示一个良好的起点
提前感谢。我在本例中使用了,但是您可以很容易地交换它们的库。每个签名基本相同
结果
[
{
"Title": "Things",
"Items": [
{
"Name": "Raindrops on roses",
"Score": 0,
"Count": 1
},
{
"Name": "Whiskers on kittens",
"Score": 1,
"Count": 1
},
{
"Name": "Bright copper kettles",
"Score": 2,
"Count": 1
},
{
"Name": "Warm woolen mittens",
"Score": 3,
"Count": 1
},
{
"Name": "Brown paper packages",
"Score": 4,
"Count": 1
}
],
"Count": 5
},
{
"Title": "Colors",
"Items": [
{
"Name": "White",
"Score": 1,
"Count": 2
},
{
"Name": "Blue",
"Score": 6,
"Count": 3
},
{
"Name": "Red",
"Score": 2,
"Count": 2
},
{
"Name": "Yellow",
"Score": 3,
"Count": 2
},
{
"Name": "Green",
"Score": 7,
"Count": 2
},
{
"Name": "Orange",
"Score": 2,
"Count": 1
},
{
"Name": "Purple",
"Score": 4,
"Count": 1
},
{
"Name": "Black",
"Score": 2,
"Count": 1
},
{
"Name": "Brown",
"Score": 3,
"Count": 1
}
],
"Count": 9
},
{
"Title": "Animals",
"Items": [
{
"Name": "Dog",
"Score": 0,
"Count": 1
},
{
"Name": "Rabbit",
"Score": 5,
"Count": 2
},
{
"Name": "Cat",
"Score": 2,
"Count": 1
},
{
"Name": "Squirrel",
"Score": 6,
"Count": 2
},
{
"Name": "Duck",
"Score": 6,
"Count": 2
},
{
"Name": "Bear",
"Score": 0,
"Count": 1
},
{
"Name": "Bird",
"Score": 1,
"Count": 1
}
],
"Count": 7
}
]
哇-很好的回答。非常感谢。我正在处理这件事,稍后会再回复。你有机会处理吗?我没有添加ko。observableArray
组件,因为我认为您对转换例程更感兴趣,但它们应该非常容易添加。如果你有任何问题,请告诉我。嗨,布兰登,很抱歉回复晚了。我确实尝试将您的解决方案重新创建为纯淘汰(models、ko.observearrays和ko.utils),因为我需要合并更多功能,我怀疑淘汰MVVM会很好地适应这些功能。e、 在回答你的问题之前,我希望这个问题有一个明确的答案。正如我所说,性能是至关重要的,所以如果lo dash的_each比knockout的ArrayForEach快(例如),我会同意这一点。
[
{
"Title": "Things",
"Items": [
{
"Name": "Raindrops on roses",
"Score": 0,
"Count": 1
},
{
"Name": "Whiskers on kittens",
"Score": 1,
"Count": 1
},
{
"Name": "Bright copper kettles",
"Score": 2,
"Count": 1
},
{
"Name": "Warm woolen mittens",
"Score": 3,
"Count": 1
},
{
"Name": "Brown paper packages",
"Score": 4,
"Count": 1
}
],
"Count": 5
},
{
"Title": "Colors",
"Items": [
{
"Name": "White",
"Score": 1,
"Count": 2
},
{
"Name": "Blue",
"Score": 6,
"Count": 3
},
{
"Name": "Red",
"Score": 2,
"Count": 2
},
{
"Name": "Yellow",
"Score": 3,
"Count": 2
},
{
"Name": "Green",
"Score": 7,
"Count": 2
},
{
"Name": "Orange",
"Score": 2,
"Count": 1
},
{
"Name": "Purple",
"Score": 4,
"Count": 1
},
{
"Name": "Black",
"Score": 2,
"Count": 1
},
{
"Name": "Brown",
"Score": 3,
"Count": 1
}
],
"Count": 9
},
{
"Title": "Animals",
"Items": [
{
"Name": "Dog",
"Score": 0,
"Count": 1
},
{
"Name": "Rabbit",
"Score": 5,
"Count": 2
},
{
"Name": "Cat",
"Score": 2,
"Count": 1
},
{
"Name": "Squirrel",
"Score": 6,
"Count": 2
},
{
"Name": "Duck",
"Score": 6,
"Count": 2
},
{
"Name": "Bear",
"Score": 0,
"Count": 1
},
{
"Name": "Bird",
"Score": 1,
"Count": 1
}
],
"Count": 7
}
]