поиск частоты пары значений ключа в объекте в javascript

Нет, нет способа вызвать strftime() с определенной локалью.

Предполагая, что ваше приложение не является многопоточным, сохраните и восстановите существующий язык и установите для вашей локали значение 'C', когда вы вызываете strftime.

#! /usr/bin/python3
import time
import locale


def get_c_locale_abbrev():
  lc = locale.setlocale(locale.LC_TIME)
  try:
    locale.setlocale(locale.LC_TIME, "C")
    return time.strftime("%a-%b")
  finally:
    locale.setlocale(locale.LC_TIME, lc)

# Let's suppose that we're french
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')

# Should print french, english, then french
print(time.strftime('%a-%b'))
print(get_c_locale_abbrev())
print(time.strftime('%a-%b'))

Если вы предпочитаете with: - try: - finally:, вы можете разбить менеджер контекста:

#! /usr/bin/python3
import time
import locale
import contextlib

@contextlib.contextmanager
def setlocale(*args, **kw):
  saved = locale.setlocale(locale.LC_ALL)
  yield locale.setlocale(*args, **kw)
  locale.setlocale(locale.LC_ALL, saved)

def get_c_locale_abbrev():
  with setlocale(locale.LC_TIME, "C"):
    return time.strftime("%a-%b")

# Let's suppose that we're french
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')

# Should print french, english, then french
print(time.strftime('%a-%b'))
print(get_c_locale_abbrev())
print(time.strftime('%a-%b'))
]
2
задан Naveen Kariyappa 13 July 2018 в 05:01
поделиться

5 ответов

Предполагая, что teaherList предназначен для массива объектов, вот метод, который не требует в зависимости от библиотеки, а также создает выходной объект за один проход (итоговые итерации = длина массива) с помощью reduce:

const teaherList = [
  {teacherID:1,teacherName:"john"},
  {teacherID:2,teacherName:"joe"},
  {teacherID:3,teacherName:"jill"},
  {teacherID:1,teacherName:"john"},
  {teacherID:2,teacherName:"joe"},
  {teacherID:3,teacherName:"jill"},
  {teacherID:1,teacherName:"john"},
  {teacherID:2,teacherName:"joe"},
  {teacherID:3,teacherName:"jill"},
];
console.log(
  teaherList.reduce((a, { teacherName }) => (
    Object.assign(a, { [teacherName]: (a[teacherName] || 0) + 1 })
  ), {})
);

5
ответ дан CertainPerformance 17 August 2018 в 13:41
поделиться

Я немного изменил этот параметр teaherList, потому что это не действительный объект. Вы можете попробовать что-то вроде этого, результирующий массив будет таким [{teacherID1: teacherName1}, {teacherID2: teacherName2}].

var teaherList = [
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
]
var result = teaherList.reduce(function(acc, cV) {
if(!acc[cV.teacherName]) {
acc[cV.teacherName]= {teacherID: cV.teacherID,
teacherName: cV.teacherName, 
count: 1};
} else {
acc[cV.teacherName].count++;
}
return acc;
}, {});

console.log(result);

Надеюсь, это поможет.

-1
ответ дан Abhishek 17 August 2018 в 13:41
поделиться
  • 1
    hey mate, код просто привязывает ключ к его значению, желаемый результат похож на [{teacherID: 1 teacherName: & quot; john & quot; count: 3}, {teacherID: 2 teacherName: & quot; Joe & quot ;, count: 3 }, {teacherID: 3 teacherName: & quot; jill & quot; count: 3}] – Naveen Kariyappa 13 July 2018 в 06:02
  • 2
    @NaveenKariyappa получил это! Я постараюсь это получить. – Abhishek 14 July 2018 в 17:32
let temp = []
_.each(teaherList, function(k){
   temp.push(k.teacherID)
)

let count1 = countBy(temp);
console.log(count1) // object
//(1:3,2:3,3:3)

, пожалуйста, дайте мне знать, если есть лучший способ этого

1
ответ дан Naveen Kariyappa 17 August 2018 в 13:41
поделиться

Вы можете использовать Array#forEach без накладных расходов для назначения объекта и возврата объекта для каждого цикла.

var teacherList = [{ teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }, { teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }, { teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }],
    frequency = Object.create(null);
    
teacherList.forEach(({ teacherName }) => frequency[teacherName] = (frequency[teacherName] || 0) + 1);

console.log(frequency);

1
ответ дан Nina Scholz 17 August 2018 в 13:41
поделиться

Вот еще один способ сделать это, используя цикл while.

teaherList = [{teacherID:1,teacherName:"john"},{teacherID:2,teacherName:"joe"},{teacherID:3,teacherName:"jill"},{teacherID:1,teacherName:"john"},{teacherID:2,teacherName:"joe"},{teacherID:3,teacherName:"jill"},{teacherID:1,teacherName:"john"},{teacherID:2,teacherName:"joe"},{teacherID:3,teacherName:"jill"}];

const calculateFrequencies = ({ input, output = Object.create(null), id, name, 
                                start: i = 0, end = input.length }) => {
    while(i < end && ({ teacherID: id, teacherName: name } = input[i++]))
        ++(output[id] || (output[id] = { id, name, count: 0 })).count;
    
    return Object.values(output);
}

console.log(calculateFrequencies({ input: teaherList }));

0
ответ дан Tiny Giant 17 August 2018 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: