Granular manipulation of array variables in Datatables

You can see in this fiddle that I'm looking for a solution that lets me join a couple of JSON fields in the same Datatables column. This is the solution I found:

 function ( data, type, full ) {
      var a = (full["container-title"]);
      var b = (full["volume"]);
      var c = (full["issue"]);
      var d = (full["page"]);
      var x = ([a, b, c, d]);
      return $.map( x, function ( d, i ) {
      return d;}).join( ', ' );

This outputs the values I want, separated by commas. However, I would like to add some html to each variable before the output. Say, for instance, I want "volume" to be preceded by "Vol.". But if I try this

var a = 'Vol.' + (full["volume"]);

the value is passed as "undefined" and completely unusable. Any other route?



Your approach does work, check this JSFiddle ( What you were running into was not being able to find the relevant data for issue as it's not in your data, if you do a check before adding it to the array you're laughing:

    "ajax": {
        "url": "",
        "dataSrc": ""
    "columns": [{
        "data": "",
        "defaultContent": null,
        "render": function(data, type, full) {
            var x = [];
            if (full["container-title"]) {
                x.push("Title: " + full["container-title"]);
            if (full["volume"]) {
                x.push("Volumns: " + full["volume"]);
            if (full["issue"]) {
                x.push("Issue: " + full["issue"]);
            if (full["page"]) {
                x.push("Page: " + full["page"]);
            return $.map(x, function(d, i) {
                return d;
            }).join(', ');
    }, ],

Also, your script includes were in the wrong order. :-D


This is more elegant if you HAVE to specify which items you want

function cFL(string) {
  return string.charAt(0).toUpperCase() + string.slice(1);

"render": function(data, type, full) {
  var x = [], y=["container-title","volume","issue","page"];
  for (var i=0;i<y.length;i++) { 
    if(full[y]) x.push(cFL(y[i])+": "+full[y]);
  return x.length==0?"":x.join(", ");


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.