Используйте Array#map
, Array#reduce
и Array#join
, чтобы окружить элементы внутреннего массива требуемыми тегами HTML, а затем уплотнить в одну строку. В настоящее время у вас есть неявный вызов Array#toString
, который создает разделенную запятыми строку элементов внутреннего массива (внутренний массив в teamData[i]
), и, таким образом, у вас есть только одна ячейка в ваших предыдущих попытках выходной.
Эта простая функция предполагает, что вы не применяете какие-либо стили или атрибуты, специфичные для столбцов или строк, поэтому она может просто одинаково обрабатывать каждый элемент Подход Kathy кажется хорошим мне. Я лично позволил бы компаратору быть указанным явно: SequenceEqual, как упомянуто CMS хорош, но из-за его общности более чем , прямая версия массива, вероятно, будет самой эффективной - добавляющая общность и абстракция обычно поражают производительность, хотя, является ли это значительным , будет зависеть от приложения. Вы могли использовать SequenceEqual: Возможно, что-то вроде этого? я не уверен в производительности, пораженной в этого все же. РЕДАКТИРОВАНИЕ исправленная версия, принимающая во внимание предложения Jon: . Если у вас есть симметричный стиль для применения, вам нужно сначала обработать заголовки / переменные строки с помощью .map
(поскольку затем вы можете использовать индексы элементов), а затем .join("")
вместо простого .join
с использованием разделителей тегов. function getTableHTMLFrom(array, hasHeaders) {
if (!array || !array.length || !array[0].length)
return "";
const headerString = (hasHeaders ?
"
"
: "");
const tdTag = "" + array.shift().join(" ") + " ";
const bodyString = array.reduce(function (s, row) {
s += " " + tdTag + row.join("" + tdTag) + " ";
return s;
}, "");
return "" + headerString + bodyString + "
";
}
3 ответа
bool AreEqual<T>(T[] a, T[] b)
{
return AreEqual(a, b, EqualityComparer<T>.Default);
}
bool AreEqual<T>(T[] a, T[] b, IEqualityComparer<T> comparer)
{
// Handle identity comparison, including comparing nulls
if (a == b)
{
return true;
}
if (a == null || b == null)
{
return false;
}
if(a.Length != b.Length)
{
return false;
}
for(int i = 0; i < a.Length; i++)
{
if(!comparer.Equals(a[i], b[i]))
{
return false;
}
}
return true;
}
IEnumerable<T>
я не думаю, что он может убрать "раннее", если длина не равна. (Возможно, что это проверяет на обе последовательности, реализовывая IList хотя, для проверки количества непосредственно.) Вы могли сделать вывод немного больше, для использования IList<T>
bool AreEqual<T>(IList<T> a, IList<T> b, IEqualityComparer<T> comparer)
{
if(a.Count != b.Count)
{
return false;
}
for(int i = 0; i < a.Count; i++)
{
if(!comparer.Equals(a[i], b[i]))
{
return false;
}
}
return true;
}
string[] a = { "1", "2", "3" };
string[] b = { "1", "2", "3" };
bool areEqual = a.SequenceEqual(b); // true
string[] c = { "1", "2", "5" };
areEqual = a.SequenceEqual(c); // false
static bool AreEqual<T>(T[] a, T[] b)
{
bool areEqual = false ;
T[] result = a.Intersect(b.AsEnumerable()).ToArray();
areEqual = (result.Length == a.Length) && (result.Length == b.Length);
return areEqual;
}
static bool AreEqual<T>(T[] a, T[] b)
{
return a.SequenceEqual(b);
}
Похожие вопросы: