我有一个像这样的JSON数组:
json = [{
"a":"ABABABAB",
"b":30,
"c":"available"
},
{
"a":"A",
"b":30,
"c":"unavailable"
},
{
"a":"AB",
"b":29,
"c":"available"
},
{
"a":"ABAABACDA",
"b":29,
"c":"available"
},
{
"a":"ABAABACDA",
"b":29,
"c":"available"
}];
>= 3
; (例如:ABABABAB = 8
)["ABABABA", "ABABA"]
-> 12)到目前为止我所做的。.
a。 a
的名称应该唯一:
unique_a = [];
for (i = 0; i < json.length; i++) {
if (unique_a.indexOf(json[i].a) === -1) {
unique_a.push(json[i].a);
}
}
b。为>= 3
:
var sort_3 = unique_a.filter(el => el.a.length >= 3);
答案 0 :(得分:2)
对于所有a.length
的总数,您可以使用简单的forEach()
循环并将长度添加到变量中:
var total = 0;
unique_a.forEach(function(u) {
total += u.length;
});
console.log(total);
答案 1 :(得分:1)
您可以使用JS Array.map Array.fileter Array.reduce通过链接方法来实现
function countUniqueTextLengths(arr) {
return arr.map((a) => a.a).filter((a, i, ar) => ar.indexOf(a) == i && a.length > 4).reduce((t, v) => t + v.length, 0)
}
//optimized
function countUniqueTextLengths_2(arr) {
var u = [],
c = 0;
arr.forEach(element => {
if (u.indexOf(element.a) === -1 && element.a.length > 4) {
u.push(element.a);
c += element.a.length;
}
});
return c;
}
var json = [{
"a": "ABABABAB",
"b": 30,
"c": "available"
},
{
"a": "A",
"b": 30,
"c": "unavailable"
},
{
"a": "AB",
"b": 29,
"c": "available"
},
{
"a": "ABAABACDA",
"b": 29,
"c": "available"
},
{
"a": "ABAABACDA",
"b": 29,
"c": "available"
}
];
console.log(countUniqueTextLengths(json))
console.log(countUniqueTextLengths_2(json))
答案 2 :(得分:1)
这可以通过几个简单的链接步骤完成:
reduce()
数组以应用我们的过滤器(唯一和length > 3
)
join()
的结果放入单个字符串
获取该字符串的.length
var json = [{ "a": "ABABABAB", "b": 30, "c": "available" }, { "a": "A", "b": 30, "c": "unavailable" }, { "a": "AB", "b": 29, "c": "available" }, { "a": "ABAABACDA", "b": 29, "c": "available" }, { "a": "ABAABACDA", "b": 29, "c": "available" }];
let result = json
.reduce( (a,i) => !a.includes(i.a) && i.a.length > 3 ? [...a, i.a] : a , [])
.join("")
.length;
console.log(result);
说明
1。。.reduce()
提取我们现有的数组项(i
)并从中创建一个新的数组项(a
)。
.reduce( (a,i) =>
!a.includes(i.a) && i.a.length > 3 //If not yet in our resulting array and length > 3
? [...a, i.a] //Add it to the resulting array
: a //Else, leave the array alone
, []) //The initial value of our resulting array
这给我们留下了
[
"ABABABAB",
"ABAABACDA"
]
2。。然后,我们可以.join("")
将其组合为单个字符串:
"ABABABABABAABACDA"
3。最后,.length
向我们提供该字符串中的字母数量:
17
答案 3 :(得分:-1)
使用lodash
https://lodash.com/
var json = [{
"a":"ABABABAB",
"b":30,
"c":"available"
},
{
"a":"A",
"b":30,
"c":"unavailable"
},
{
"a":"AB",
"b":29,
"c":"available"
},
{
"a":"ABAABACDA",
"b":29,
"c":"available"
},
{
"a":"ABAABACDA",
"b":29,
"c":"available"
}];
var uniq = _.uniqBy(json, 'a');
var result = _.filter(uniq, function(value, key) {
return value.a.length >= 3;
});
//console.log(result);
var lengths = _.map(_.map(result, 'a'), function(str){
return str.length
});
var sum = _.reduce(lengths, (a, b) => a + b, 0);
console.log(sum);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>