我想計算物件值的子字串,即整個物件包含一個字串而不是一個鍵等于一個字串。XSLT 中的作業 Xpath 將是
count(//v[contains(.,current-grouping-key())])
但我無法在javascript中解決這個問題。
我嘗試了以下方法:
const obj =
[ { v: 'Bla Blu Bli' },
{ v: 'Bla Blu Bli' },
{ v: 'Bla Blu' },
{ v: 'Bla Bli' }
];
const count = obj.reduce( function(sums,entry) {
sums[entry.v] = (sums[entry.v] || 0) 1;
return sums;
},{});
console.log(count)
但這僅計算確切的字串。所以我得到:
"Bla Blu Bli": 2,
"Bla Blu": 1,
"Bla Bli": 1
代替
"Bla Blu Bli": 2,
"Bla Blu": 3,
"Bla Bli": 3
有沒有辦法計算子字串而不是確切的值?
uj5u.com熱心網友回復:
你可以使用它:
const obj =
[ { v: 'Bla Blu Bli' }
, { v: 'Bla Blu Bli' }
, { v: 'Bla Blu' }
, { v: 'Bla Bli' }
];
const counts = obj
.map(e=>e.v.split(' ').sort((a,b)=>a.localeCompare(b)))
.reduce((r,a,_,all)=>
{
let terms = a.join(' ')
if (!r[terms])
r[terms] = all.reduce((c,x)=>c (a.every(v=>x.includes(v))?1:0),0);
return r
},{})
console.log( counts )
.as-console-wrapper {max-height: 100% !important;top: 0;}
.as-console-row::after {display: none !important;}
uj5u.com熱心網友回復:
您必須使用 indexOf 或類似方法來查看字串中是否存在子字串。
例子:
obj = [
{
"v": "Bla ? Blu ? Bli"
},
{
"v": "Bla ? Blu ? Bli"
},
{
"v": "Bla ? Blu"
}
]
const counts = Object.fromEntries(
obj.map(({v}) => [v, obj.reduce((acc, el) => {
if (el.v.indexOf(v) > -1) acc ;
return acc;
}, 0)])
);
console.log(counts);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483801.html
標籤:javascript 数组 数数 子串 javascript 对象
上一篇:陣列(numpy)和索引(pandas)物件之間的區別?
下一篇:如何洗掉熊貓中的空串列?