অ্যারেতে দীর্ঘতম স্ট্রিং সন্ধান করা


85

স্ট্রিং অ্যারেটিতে দীর্ঘতম স্ট্রিংটি খুঁজে পাওয়ার জন্য কি কোনও ছোট্ট উপায় আছে?

এরকম কিছু arr.Max(x => x.Length);?

উত্তর:


198

উপলভ্য যেহেতু জাভাস্ক্রিপ্ট 1.8 / এর নাম ECMAScript 5 এবং সবচেয়ে উপলব্ধ পুরোনো ব্রাউজারে :

var longest = arr.reduce(
    function (a, b) {
        return a.length > b.length ? a : b;
    }
);

অন্যথায়, একটি নিরাপদ বিকল্প:

var longest = arr.sort(
    function (a, b) {
        return b.length - a.length;
    }
)[0];

যদি একই আকারের 2 বা ততোধিক স্ট্রিং থাকে এবং ফলাফলটি অ্যারে হওয়া উচিত? হ্রাস এই ক্ষেত্রে কাজ করবে না এবং আপনাকে প্রথম ফলাফলটিতে পুনরাবৃত্তি করতে হবে।
গিসমো রানাস

@ জিসমোআরানাস এটি একটি আলাদা প্রশ্ন এবং আপনি এখনও reduceকলব্যাক ফাংশন ব্যবহার করতে পারবেন যা অ্যারে ফেরত দেয়।
মিথ্যা

36

একটি পুরানো প্রশ্নের নতুন উত্তর: ES6 এ আপনি সংক্ষিপ্ত করতে পারেন:

Math.max(...(x.map(el => el.length)));

7
এটি সবচেয়ে দীর্ঘতম স্ট্রিং নয়, দীর্ঘতম স্ট্রিংয়ের দৈর্ঘ্য দেয়।
মাইকিমিকে

আরেকটি বিষয় লক্ষণীয় যে এটি দ্বিগুণ সংগ্রহকে অতিক্রম করবে O(n^2)যেখানে অন্যান্য বিকল্পগুলি কেবল একবার সংগ্রহকে অতিক্রম করবে O(n)। কাস্টম sortO(log(n))
তুলকগুলি

4
@ সিটিএস_এই দু'টি ট্র্যাভারসাল স্বাধীন, তাই আমার মনে হয় এটি হয় O(n) + O(n) = O(n), তা নয় O(n^2)
জোশুয়া ব্রিডেন

@ জোশুয়া ব্রিডেন ইয়েপ আমি বিশ্বাস করি যে আপনি সেই ঠিক
correct

28

আমি এই জাতীয় কিছু করব

var arr = [
  'first item',
  'second item is longer than the third one',
  'third longish item'
];

var lgth = 0;
var longest;

for (var i = 0; i < arr.length; i++) {
  if (arr[i].length > lgth) {
    var lgth = arr[i].length;
    longest = arr[i];
  }
}

console.log(longest);


4
এটি সেরা যা এটি আপনার অ্যারেকে প্রভাবিত করে না। আপনি যদি বাছাই করেন (নির্বাচিত উত্তরের মতো) আপনার অ্যারে বাছাই হয়, যখন কখনও কখনও আপনি এটি চান না। +1, ধন্যবাদ
ওনিগুই


4

অ্যারে.প্রোটোটাইপ ব্যবহার করে - (@ ক্যাটসপফ পোস্ট করেছেন এমনভাবে সাজান এবং আমি ফিডল করার সময় @ ডেসেজ)

এখানে ডেমো

var arr = [
    "2 --",
    "3 ---",
    "4 ----",
    "1 -",
    "5 -----"
];

Array.prototype.longest=function() {
    return this.sort(
      function(a,b) {  
        if (a.length > b.length) return -1;
        if (a.length < b.length) return 1;
          return 0
      }
    )[0];
}
alert(arr.longest());    

4

আমি একটি কার্যকরী + পুনরাবৃত্ত পদ্ধতির সরবরাহ করি। এটি কীভাবে কাজ করে তা বুঝতে মন্তব্যগুলি দেখুন:

const input1 = ['a', 'aa', 'aaa']
const input2 = ['asdf', 'qwer', 'zxcv']
const input3 = ['asdfasdf fdasdf a sd f', ' asdfsdf', 'asdfasdfds', 'asdfsdf', 'asdfsdaf']
const input4 = ['ddd', 'dddddddd', 'dddd', 'ddddd', 'ddd', 'dd', 'd', 'd', 'dddddddddddd']

// Outputs which words has the greater length
// greatestWord :: String -> String -> String
const greatestWord = x => y => 
      x.length > y.length ? x : y
      
// Recursively outputs the first longest word in a series
// longestRec :: String -> [String] -> String
const longestRec = longestWord => ([ nextWord, ...words ]) =>
      //                                ^^^^^^^^^^^^
      // Destructuring lets us get the next word, and remaining ones!
      nextWord // <-- If next word is undefined, then it won't recurse.
        ? longestRec (greatestWord (nextWord) (longestWord)) (words) 
        : longestWord


// Outputs the first longest word in a series
// longest :: [String] -> String
const longest = longestRec ('')

const output1 = longest (input1)
const output2 = longest (input2) 
const output3 = longest (input3)
const output4 = longest (input4)

console.log ('output1: ', output1)
console.log ('output2: ', output2)
console.log ('output3: ', output3)
console.log ('output4: ', output4)


কোন ধারণা কেন এটি আমার পক্ষে কাজ করে না? const longestRec = longestWord => ([nextWord ... শব্দ]) => ^ TypeError: অনির্ধারিত কোন ফাংশন নয়
ডিউক

@ ডুক আমি একবার দেখে নেব, তবে আমি অনুমান করব যে সমস্যাটির পিছনে কী রয়েছে।
Matías Fidemraizer

@ ডু বিটিডাব্লু, আপনি কি আমাকে ইনপুট দিতে পারবেন? আপনি কোড ব্যবহার করছেন হিসাবে ?
Matías Fidemraizer

নিচে দেখ. তবে এটি আপাতদৃষ্টিতে সংকলনও করে না। তবে আপনি ঠিক বলেছেন: কেবলমাত্র আপনার কোডটি ব্যবহার করা ঠিকঠাক কাজ করে .... objজেক্ট = {"হোস্টনেম": {"উত্পন্ন": "@ লগন", "মান": "ওপেনপিআই", "লাস্টআরন": "2018-11- 15 07: 57: 50,186 "}," হোস্টিপ ": Gene" উত্পন্ন ":" @ ক্রোন "," মান ":" 192.168.178.70 "," লাস্টআরুন ":" 2018-11-15 02: 49: 23,961 "} , "রিলিজ": Gene "উত্পন্ন": "@ ক্রোন", "মান": "রাস্পবিয়ান জিএনইউ / লিনাক্স 9 (প্রসারিত)", "লাস্টআরুন": "2018-11-15-15 02: 49: 24,099"}};
ডিউক

আপনাকে বিরক্ত করার জন্য দুঃখিত, আমি ভেবেছিলাম এটি সংকলন করে না। আমার কোন অ্যারে নেই
ডিউক

3

আমি সংক্ষিপ্ততম সমাধানটি দেখতে পাচ্ছি

function findLong(s){
  return Math.max.apply(null, s.split(' ').map(w => w.length));
}

4
আমি এটিকে পছন্দ করি, যদিও এটি দ্রুততম নাও হতে পারে
গুহুর

4
এটি দৈর্ঘ্য দেয় তবে শব্দটি দেয় না
brk

3

সম্ভবত দ্রুততম না, তবে অবশ্যই বেশ পাঠযোগ্য:

function findLongestWord(array) {
  var longestWord = "";

  array.forEach(function(word) {
    if(word.length > longestWord.length) {
      longestWord = word;
    }
  });

  return longestWord;
}

var word = findLongestWord(["The","quick","brown", "fox", "jumped", "over", "the", "lazy", "dog"]);
console.log(word); // result is "jumped"

প্রত্যেকের জন্য অ্যারে ফাংশনটি IE9 + থেকে সমর্থিত


3

ES6- reduce()O(n)জটিলতার কল দিয়ে সমাধানগুলি সম্পন্ন করা যেতে পারে sort()যা সমাধানগুলির বিপরীতে O(nlogn):

const getLongestText = (arr) => arr.reduce(
  (savedText, text) => (text.length > savedText.length ? text : savedText),
  '',
);

console.log(getLongestText(['word', 'even-longer-word', 'long-word']))


4
আমি আশা করি আরও বেশি লোক এ পর্যন্ত নিচে নেমে যায়, কারণ এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। যদি কোনও কারণে আপনার ES5 সিনট্যাক্সের প্রয়োজন হয় এবং চর্বিযুক্ত তীর ফাংশন (দু: খিত মুখ) ব্যবহার করতে না পারেন তবে আপনি এটি করতে পারেন:arr.reduce(function(savedText, text) { return text.length > savedText.length ? text : savedText; }, '');
ম্যাক্সশিউটি

2

আমি জেসনের ফাংশন থেকে অনুপ্রাণিত হয়ে তাতে কিছুটা উন্নতি করেছি এবং ফলস্বরূপ দ্রুত অনুসন্ধানকারী হয়েছি:

function timo_longest(a) {
  var c = 0, d = 0, l = 0, i = a.length;
  if (i) while (i--) {
    d = a[i].length;
    if (d > c) {
      l = i; c = d;
    }
  }
  return a[l];
}
arr=["First", "Second", "Third"];
var longest = timo_longest(arr);

গতির ফলাফল: http://jsperf.com/longest-string-in-array/7


1

আমি এরকম কিছু করব:

function findLongestWord(str) {
var array = str.split(" ");
var maxLength=array[0].length;
for(var i=0; i < array.length; i++ ) {
if(array[i].length > maxLength) maxLength = array[i].length}
return maxLength;}

findLongestWord("What if we try a super-long word such as otorhinolaryngology");

1

যদি আপনার স্ট্রিং ইতিমধ্যে একটি অ্যারেতে বিভক্ত হয়ে গেছে, আপনার বিভক্ত অংশের প্রয়োজন হবে না।

function findLongestWord(str) {
  str = str.split(' ');
  var longest = 0;

  for(var i = 0; i < str.length; i++) {
     if(str[i].length >= longest) {
       longest = str[i].length;
        } 
     }
  return longest;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

1

আপনি যদি একাধিকের বেশি আশা করেন তবে এটি কাজ করবে:

_.maxBy(Object.entries(_.groupBy(x, y => y.length)), y => parseInt(y[0]))[1]

এটি লোডাশ ব্যবহার করে এবং একটি অ্যারে দেয়।



0
function findLongestWord(str) {
  str = str.split(" ");
  var sorted = str.sort(function(prev,current){
    return prev.length - current.length;   
  });
  var index = sorted.length;
  str = sorted[index-1];
  return str;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

এই অ্যাড করে কিছু বিদ্যমান উত্তর ইতিমধ্যে বিস্তৃত তালিকা কিভাবে? নং
luk2302

0

ES6 সমর্থিত এছাড়াও সদৃশ স্ট্রিং

var allLongestStrings = arrayOfStrings => {
  let maxLng = Math.max(...arrayOfStrings.map( elem => elem.length))
  return arrayOfStrings.filter(elem => elem.length === maxLng)
}

let arrayOfStrings = ["aba", "aa", "ad", "vcd","aba"]

console.log(allLongestStrings(arrayOfStrings))

0

আধুনিক ব্রাউজারগুলি একটি for...ofলুপ সমর্থন করে । ক্রোম, সাফারি, এজ এবং ফায়ারফক্সে এই সমস্যা সমাধানের দ্রুত এবং সংক্ষিপ্ততম উপায়টিও সবচেয়ে পরিষ্কার:

let largest = '';
for (let item of arr) {
  if (item.length > largest.length) largest = item
}

আইই, আপনি ব্যবহার করতে পারেনArray.forEach ; এটি অ্যারে বাছাই বা হ্রাস করার চেয়ে আরও দ্রুত এবং স্পষ্ট।

var largest = '';
arr.forEach(function(item) {
  if (item.length > largest.length) largest = item
});


0
function allLongestStrings(array) {
    const newArr=[];
    let temp =    Math.max(...(array.map(el => el.length)));    
     array.forEach(item => {
        if(temp == item.length){
          newArr.push(item);
        }
    });
    return newArr;
}

4
এই কোডটি ওপির সমস্যার সমাধান করতে পারে তবে আপনার কোডটি কীভাবে ওপি'র সমস্যাটিকে সম্বোধন করে সে সম্পর্কে একটি ব্যাখ্যা অন্তর্ভুক্ত করা ভাল। এইভাবে, ভবিষ্যতের দর্শনার্থীরা আপনার পোস্ট থেকে শিখতে এবং এটিকে তাদের নিজস্ব কোডে প্রয়োগ করতে পারে। এসও কোনও কোডিং পরিষেবা নয়, তবে জ্ঞানের উত্স। এছাড়াও, উচ্চ মানের, সম্পূর্ণ উত্তরগুলি আপলোড হওয়ার সম্ভাবনা বেশি। এই বৈশিষ্ট্যগুলি সহ সমস্ত পোস্ট স্বাবলম্বিত হওয়ার প্রয়োজনীয়তার সাথে একটি প্ল্যাটফর্ম হিসাবে এসও এর কিছু শক্তি যা এটি ফোরামে পৃথক করে। আপনি অতিরিক্ত তথ্য যোগ করতে এবং / অথবা উত্স ডকুমেন্টেশন সহ আপনার ব্যাখ্যা পরিপূরক করতে সম্পাদনা করতে পারেন।
ysf

-1
var array = ["hello","falsey","undefined"];
var findLongestWord = function(array){
    var longest = array.reduce(function(a,b){
    return (a.length > b.length) ? a : b;
  });
    return longest;
}
findLongestWord(array);

বা তীর ফাংশনটি ব্যবহার করে আরও ক্লিনার: var findLongestWord = ফাংশন (অ্যারে) {var দীর্ঘতম = অ্যারে.রেড ((ক, বি) => {রিটার্ন (a.leth> b.length)? a: b;}); দীর্ঘতম প্রত্যাবর্তন; }
আশ খান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.