pushing to array element appended with single quote - javascript

the following varibale is evaluated and adding into array element, getting a single quote when array is printed, how to avoid this,here is the code
var t1 = "Date.UTC("+varDate[0]+','+varDate[1]+','+varDate[2]+")"
console.log(t1)
The Output is
Date.UTC(2001,1,23)
then added t1 to an array
diffArray.push(t1)
console.log(t1)
it appended single quote why ? how to avoid this ?
[ 'Date.UTC(2001,1,23)']

This is just console.log() showing you that the item in the array is a string. Your t1 variable has always been a string so there is no difference in the internal representation, just how console.log() chooses to display it.
If you do console.log(diffArray[0]), you will see the original representation without quotes just because that's what console.log() does when you give it a plain string. When you give console.log() an array, it puts quotes around any elements that are strings to indicate the difference between a string and some other type that the array might hold.
Look in your console for this jsFiddle: http://jsfiddle.net/jfriend00/yrannpm2/
console.log(t1); // Date.UTC(2001,1,23)
console.log(diffArray[0]); // Date.UTC(2001,1,23)
console.log(diffArray); // ["Date.UTC(2001,1,23)"]

Related

new Array(5).toString() returning four commas

to understand the below code snippet I looked at this link.
But still I am not able to figure it out why its printing four commas in the console.
since I am creating array of five items
can you tell me how its working.
new Array(5).toString();
",,,,"
Imagine what it would look like with values in each of the array indexes.
[1,2,3,4,5].join(); // Returns 1,2,3,4,5
Now if you remove the numbers, you're just left with the commas in the middle.
new Array(5).join(); // Returns ,,,, because the values are blank.
toString() method iterates throw all elements in the Array push them into string and push , betweeen them.
As you defined empty Array with 5 elements, when you apply toString it convert it to five "empty" strings with 4 "," between them
new Array(5)returns a sparse array or an array with 5 empty spaces inside. The only thing that this does is to set the length property of the array object to the specified argument (5 in this case).
console.log(new Array(5)) // browser console --> [empty × 5]
So naturally if you attempt to print its contents it would show you that you have 5 empty spaces separated by ,
console.log(new Array(5).toString()) // ,,,, <-- 5 empty ',' separated elements
As you can see, someArray.toString() will return what is inside the array but without [ and ].
console.log([1,2,3,4,5])
console.log([1,2,3,4,5].toString())
So, if you have noting in the array element, it will return empty string and only print the comma. (Array(5) is the same as [,,,,,])
console.log([,,,,])
console.log([,,,,].toString())
Array(5) will return an array only with the property length: 5. Wich will make it's elements undefined.
If you want to make it something else then undefined you can use .fill
console.log(Array(5))
console.log(Array(5).fill(""))
console.log(Array(5).fill("anything"))

convert array stored in a string to an array

I have an array value which is coming from database as an string. I need to convert it into an array. When I check my value in console I can see value as
"[["COL1","COL2","COL3"],["COL4","space,"COL5"]]"
In order to perform my operations I need it to be in below structure
[["COL1","COL2","COL3"],["COL4","space,"COL5"]]
I have already tried JSON.parse() and parseJSON
Expected Result :
[["COL1","COL2","COL3"],["COL4","space,"COL5"]]
Actual Result :
"[["COL1","COL2","COL3"],["COL4","space,"COL5"]]"
You need to remove the outer quotes from your string, then pass the value to JSON.parse() to get the array.
Also, you have to quote each item correctly, "space should be "space".
You can sanitize the string with String.prototype.replace() (assuming the quoting of space has been fixed in the DB):
const data = '"[["COL1","COL2","COL3"],["COL4","space","COL5"]]"';
const dataSanitized = data.replace(/^"|"$/g,"");
console.log(JSON.parse(dataSanitized));
I would suggest you do parse
JSON.parse('[["COL1","COL2","COL3"],["COL4","space","COL5"]]')
i would not suggest eval as i just read an article about "how eval is evil"
https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/

How can I treat an imported value like an array?

I'm trying to generate a google form that has a few hundred options in a drop down.
I have all the name values in a single cell formatted as follows:
'user1','user2','user3'
It is set as in the code as follows:
var studentNames = SpreadsheetApp.openById('REDACTED').getSheetByName('Student List').getRange(3,3).getValues();
When I use this variable as shown below it treats it all as a singe value instead of an array.
.setChoiceValues([studentNames])
Any help in where to go from here?
is it a string of words with single quotes and a comma to separate them? if so, you can just do a split on the comma
var s = data
var arr = s.split(",");
and now you will have an array of strings. not sure if this answers your question.
Thanks everyone for getting me pointed in the right direction.
Turns out split was just part of the answer, I had to turn it into a string first.
.toString().split(",");
getValues() returns an object, so you need to interact with it to get the string of values for your array.
Given you are selecting just one cell and so don't need to iterate through the object, try something like this:
var studentNamesObj = SpreadsheetApp.openById('REDACTED').getSheetByName('Student List').getRange(3,3).getValues();
var studentNames = studentNamesObj[0][0].split(",");

How do I use #DbLookup results to populate a Readers field in xpages?

db = new Array("myserver", "myfolder\\mydb.nsf")
dir = getComponent("Dir").value;
div = getComponent("Div").value;
lu = #DbLookup(db, "ManagerAccess", dir + "PP" + div, "DTManagers");
var a = [];
a.push(lu);
var item:NotesItem = docBackEnd.replaceItemValue('FormReaders', #Unique(a));
item.setReaders(true);
That code is on the querySaveDocument ssjs. The result I get from the #DbLookup (when I put in a computed field) look like this:
Pedro Martinez,Manny Ramirez,David Ortiz,Terry Francona
I tried doing an #Explode(#Implode) thing on it, but it doesn't seem to work.
The error I get in the browser just tells me that the replaceItemValue line is broken.
To test it, I pushed several strings one at a time, and it worked correctly populating my FormReaders field with the multiple entries.
What am I doing wrong?
I see several problems here:
A. In cases as described by you #Dblookup in fact would return an array. If you push an array into a plain computedField control it will exactly look as that you wrote:
value1, value2, ..., valueN
A computedField doesn't know anything about multiple values etc, it just can display strings, or data that can be converted to strings.
If you want to test the return value you could try to return something like lu[0]; you then should receive the array's 1st element, or a runtime error, if lu is NOT an array. Or you could ask for the array's size using lu.length. That returns the number of array elements, or the number of characters if it's just a plain string.
B. your code contains these two lines:
var a = [];
a.push(lu);
By that you create an empty array, then push lu[] to the first element of a[]. The result is something like this:
a[0] = [value1, value2, ..., valueN],
i.e. a is an array where the first element contains another array. Since you don't want that, just use #Unique(lu) in your replaceItemValue-method.
C. I don't see why replaceItemValue would throw an error here, apart from what I wrote in topic B. Give it a try by writing lu directly to the item (first without #Unique). That should work.
D. for completeness: in the first line you used "new Array". A much better way to define your db parameters is
var db = ["myserver", "myfolder/mydb.nsf"];
(see Tim Tripcony's comment in your recent question, or see his blog entry at http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-9AN5ZK)

javascript array show undefined when escape one index

I face a problem when tried to assign a value with a specific index. suppose I have javascript variable like
var track = new Array();
Now I assign a value for a specific index like-
track[10]= "test text";
now array has one value and it's length would be 1. But the main problem is it show it's length is 11.
alert(track.length); // 11 but I expect 1
and if I print its value then it shows like--
alert(track); // ,,,,,,,,,test text
and if I console this array then it show like below--
console.log(track); // undefined,undefined,undefined,undefined,.....,test text
I am very much confused because I assign only one value but it show 11. How it assign it's value and what characteristics array variable shows. Can anyone explain me and how to get its length 1 using below code--
var track = new Array();
track[10]= "test text";
alert(track); // test text
alert(track.length); // 1
console.log(track); // test text
The Array object automatically fills in the missing indexes. The reason it gives length 11 is because the index starts at 0.
If you are wanting to use key-value just use an object.
var track = {};
It will not have a .length value however.
javascript automatically fills in the array to push the element you want. You can get the "true" count by doing this:
track.filter(Boolean).length
However note that this will only "work" if you do not have any other elements that resolve to "false" value (eg. empty strings or setting them to false) so if you want to this, make sure you never actually set any other array elements to a falsy value so that you can use this convention. For example if you want to set other array values to a falsy value, use something like -1 instead as the thing to check.
Since you're setting the value for 10th position it's showing array size of 11
You must start from 0th position..
var track = new Array();
track[0]= "test text";
alert(track); // test text
alert(track.length); // 1
console.log(track); // test text
Try this
For such kind of operations i generally prefer the library called Underscore.js.
It abstracts array manipulations. You might want to checkout the compact method
Compact works like this:
_.compact([undefined, undefined, undefined, "test test"]) as ["test test"]
Then you can check the length of the returned array.
Though a simple approach is
filter(Boolean).length
But if you want to use the array then you might like underscore.

Categories